Maven: 优秀的构建和依赖管理工具
每天我们的编程工作都不只是编写正确的代码,我们很大一部分时间消耗在了进行编译、单元测试、生成文档、打包、部署等等操作上面,这些微不足道的事情,占据了时间,消磨了激情。
Maven 很好地帮助我们从重复而繁琐的构建过程中解放出来,让这个过程自动化程度极大地提高了,让我们专注于编程与结果。
安装
其实安装很简单,但你将遇到的最大难点是:不同平台下如何配置“环境变量”。
这里附上官方文档:Homepage Download Install
我在 Windows 下遇到了一个问题,这个问题在 环境变量的引用顺序问题导致无效 这篇文章中得到了解决。
如果还有问题可以参阅 Maven的安装、配置及使用入门 这里的图文教程。
POM 文件
构建系统的配置文件,如同 make 的 Makefile、Ant 的 build.xml,Maven 的配置文件叫 pom.xml。
Project Object Model,项目对象模型。
一个简单的例子如下:
<?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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>demo</groupId>
<artifactId>helloworld</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties></properties>
<dependencies></dependencies>
<build>
<plugins></plugins>
</build>
</project>
groupId 定义了项目属于哪个组,比如 junit
、org.springframework
。
artifactId 定义了一个项目在组中的唯一 ID,比如 junit
、spring-core
。
version 版本。
编写代码
默认 src/main/java
为项目主代码目录。src/main/resources
为项目主资源目录。这些代码将被打包到最终的构件中(如 jar 包)。
编译
在终端中执行命令:
$ mvn clean compile
便会自动运行以下插件和其执行目标:
clean:clean
resources:resources
compiler:compile
使用最新的 JDK
在我使用的 Maven 3 中,执行 compiler:compile
时 maven-compiler-plugin
这个核心编译插件默认使用 JDK 1.5,然而这并不是我们想要的,通过添加以下属性可更新至 JDK 1.8。
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
单元测试
在 Java 世界,JUnit 是单元测试的事实标准,我们需添加 JUnit 依赖。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
默认 src/test/main
为测试代码目录。src/test/resources
为测试资源目录。这些将不会被打包到构件中。
编写测试用例:
import org.junit.Assert;
import org.junit.Test;
public class MyTest {
@Test
public void test() {
Assert.assertEquals(2, 1+1);
}
}
运行测试用例:
$ mvn clean test
在 Maven 执行 test 之前,它会先自动执行项目主资源处理,主代码编译,测试资源处理,测试代码编译等工作,具体可参考 Maven 的生命周期。
打包
$ mvn clean package
这将生成 target/${artifact}-${version}.jar
包。
安装
$ mvn clean install
将构建项目生成的 jar 包安装到 Maven 的本地仓库,供其他项目使用。
该步骤是可选的,按需使用。
运行
你可以通过指定类名运行 main 函数:
$ java -cp demo.helloworld.Application -jar target/helloworld-1.0-SNAPSHOT.jar
或者在 pom.xml 里写一条配置:
<properties>
<start-class>demo.helloworld.Application</start-class>
</properties>
现在 jar 包的 META-INF/MANIFEST.MF
里就有了主类信息:
Main-Class: demo.helloworld.Application
可以直接运行:
$ java -jar target/helloworld-1.0-SNAPSHOT.jar
IntelliJ IDEA
以 IDEA 为 IDE 使用 Maven 可以获得非常愉快的体验。
IDEA 自带了 Maven 3,但如果本地安装了更高版本的 Maven,可以在 IDEA 的“设置”中选择它,最好加至“默认设置”里,避免每次都重复劳动。
编写完 pom.xml 后,在 IDEA 的 Project 里右键点击它,选 Maven -> Reimport 自动加载依赖,更新配置。
TODO
- archetype
- plugin
- POM: module & parent