参考:《Maven实战》
Maven使用入门
编写POM
POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
一个例子:
- 第一行:XML头、指定了该xml文档的版本和编码方式
- project元素:所有pom.xml的根元素,声明了一些POM相关的命名空间及xsd元素,不是必须的,但使用这些属性能够让第三方工具(如IDE中的XML编辑器)帮助我们快速编辑POM。
- modelVersion:指定了当前POM模型的版本,对于Maven 2及Maven 3来说,它只能是4.0.0。
- groupId:定义了项目属于哪个组,如果你的公司是mycom,有一个项目为myapp,那么groupId就应该是com.mycom.myapp。
- artifactId:定义了当前Maven项目在组中唯一的ID
- version:version指定了项目当前的版本——1.0-SNAPSHOT。SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。
- name:声明了一个对于用户更为友好的项目名称,不是必须的。
编写主代码
- 默认情况下,Maven假设项目主代码位于src/main/java目录
- 包名要与在POM中定义的groupId和artifactId相吻合,这样更加清晰,更加符合逻辑,也方便搜索构件或者Java类。
代码编写完后,在项目根目录下运行命令mvn clean compile
从输出中看到Maven首先执行了clean:clean任务,删除target/目录。默认情况下,Maven构建的所有输出都在target/目录中;接着执行resources:resources任务(未定义项目资源,暂且略过);最后执行compiler:compile任务,将项目主代码编译至target/classes目录
编写测试代码
- 测试代码写在src/test/java
- pom中增加junit的依赖
- 编译命令:mvn clean test
- 在Maven执行测试(test)之前,它会先自动执行项目主资源处理、主代码编译、测试资源处理、测试代码编译等工作,这是Maven生命周期的一个特性。
- pom中增加依赖,因为Maven的核心插件之一——compiler插件默认只支持编译Java 1.3,因此需要配置该插件使其支持Java 5
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
打包和运行
- 打包命令:mvn clean package
- Maven会在打包之前执行编译、测试等操作
- jar包它是根据artifact-version.jar规则进行命名
- 安装(将jar包放到maven本地仓库,供其他项目或模块引用):mvn clean install
- 执行test之前是会先执行compile的,执行package之前是会先执行test的,而类似地,install之前会执行package
依赖
-
groupId:定义当前Maven项目隶属的实际项目,Maven项目和实际项目不一定是一对一的关系,一个实际项目往往会被划分成很多模块。
-
artifactId:该元素定义实际项目中的一个Maven项目(模块)
-
version:该元素定义Maven项目当前所处的版本
-
packaging:该元素定义Maven项目的打包方式,当不定义packaging的时候,Maven会使用默认值jar
-
classifier:该元素用来帮助定义构建输出的一些附属构件,不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成。
-
type:依赖的类型,对应于项目坐标定义的packaging
-
scope:依赖的范围
-
optional:标记依赖是否可选
-
exclusions:用来排除传递性依赖