maven学习笔记
来源:互联网 发布:cnc加工中心编程详解 编辑:程序博客网 时间:2024/05/16 08:48
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven Hello World Project</name>
</project>
xml:指定xml文档的版式和编码方式
project:根元素,声明了一些POM相关的命名空间及xsd元素
modelVersion:指定了当前POM模型的版本,对于maven2,maven3来说,只能是4.0.0
最重要的是groupId,artifactId,version
groupId:定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联,譬如,在googlecode上建立了一个名为myapp的项目,那么groupId就应该是com.googlecode.myapp
artifactId:定义了当前maven项目在组中唯一的ID
version:指定了项目当前的版本,SNAPSHOT意为快照,说明该项目还处在开发中,是不稳定的版本。
name:声明了一个对于用户更为友好的项目名称,虽然不是必须的,但还是推荐为每个POM声明name,以方便信息交流。
没有任何实际的java代码,就能定义一个maven项目的POM,它能让项目对象模型最大程度地与实际代码相独立,可以称之为解耦。
新建java代码
package com.juvenxu.mvnbook.helloworld;
public class HelloWorld {
public String sayHello() {
return "Hello Maven";
}
public static void main(String[] args) {
System.out.print( new HelloWorld().sayHello() );
}
}
默认情况下,我们须把java代码放在src/main/java/目录下(遵循maven的约定),无须额外的配置,maven会自动搜寻该目录找到项目主代码。
java类的包名是:com.juvenxu.mvnbook.helloworld,这与之前在POM中定义的groupId和artifactId相吻合。
编译:mvn clean compile
clean告诉maven清理输出目录target/,compile告诉maven编译项目主代码,默认情况下maven构建的所有输出都在target/目录中。
编写测试代码:
默认的测试代码目录是:src/test/java
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven Hello World Project</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
代码中添加了dependencies元素,该元素下可以包含多个dependency元素以声明项目的依赖,groupId,artifactId,version和前面的意思一样,scope的值为test,表示该依赖只对测试有效,换句话说,测试代码中的import JUnit代码是没有问题的,但主代码中用import JUnit代码,就会造成编译错误。如果不声明依赖范围,表示对主代码和测试代码都有效。
代码:
package com.juvenxu.mvnbook.helloworld;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class HelloWorldTest {
@Test
public void testSayHello() {
HelloWorld helloWorld = new HelloWorld();
String result = helloWorld.sayHello();
assertEquals("Hello Maven", result);
}
}
mvn clean test
打包和运行:
POM中没有指定打包类型,使用默认打包类型jar,可以简单地执行mvn clean package进行打包,如果有需要,就可以复制这个jar文件到其他项目的Classpath中使用了。
可以使用finalName来自定义该文件的名称。
如何才能让其他的maven项目直接引用这个jar呢?需要一个安装步骤,执行mvn clean install
在打包之后,执行了安装任务install:install,从输出看到该任务将项目输出的jar安装到了maven本地库中(Installing /home/yao/code/mavendir/hello-world/pom.xml to /home/yao/.m2/repository/com/juvenxu/mvnbook/hello-world/1.0-SNAPSHOT/hello-world-1.0-SNAPSHOT.pom)。之前JUnit的POM及jar的下载的时候,我们说只有构建被下载到本地仓库后,才能由所有maven项目使用,这里同样的道理,只有将Hello World的构建安装到本地仓库之后,其他maven项目才能使用它。
虽然HelloWorld类有一个main方法,但是默认打包生成的jar是不能直接运行的,因为带有main方法的类信息不会添加到manifest中。为了生成可执行的jar文件,需要借助maven-shade-plugin,配置该插件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven Hello World Project</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.juvenxu.mvnbook.helloworld.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
现在执行mvn clean install之后,可以看到MANIFEST.MF中包含这样一行信息:Main-Class:com.juvenxu.mvnbook.helloworld.HelloWorld,现在就可以在项目根目录下执行该jar文件:java -jar target/hello-world-1.0-SNAPSHOT.jar,就可以看到输出结果:Hello Maven
- maven学习笔记
- maven学习笔记
- maven学习笔记 --转载
- Maven学习笔记
- Maven学习笔记
- maven 学习笔记
- Maven学习笔记
- maven学习笔记
- maven学习笔记
- Maven学习笔记
- Maven学习笔记1
- maven学习笔记 一
- maven学习笔记二
- Maven学习笔记
- maven学习笔记
- Maven学习笔记
- maven学习笔记
- maven学习笔记
- TryParse 容易被忽略的问题
- Tomcat+润乾的大概配置过程
- Hive0.11.0的新特性
- minifilter----FLT_CALLBACK_DATA
- Java性能调优笔记
- maven学习笔记
- 3 迭代器与概念和traits编程技法
- C++ 拷贝构造函数赋值构造函数
- mongodb 简单部署方案及实例
- Hibernate之关系映射
- sd 协议解析
- C语言动态分配一维数组
- w3schools
- 顺序链表类定义