工具链使用指南
什么是工具链?
Maven 工具链为插件提供了一种在构建过程中发现要使用的 JDK(或其他工具)的方法,而无需在每个插件或每个 中配置它们pom.xml
,或者强制在构建项目的每台机器中精确定位。
将 Maven 工具链应用于 JDK 工具链后,现在可以使用独立于运行 Maven 的特定版本的 JDK 构建项目。想想如何在 IDEA、NetBeans 和 Eclipse 等 IDE 中设置 JDK 版本,或者如何使用 Maven 中的旧 JDK 与最近的 JDK 一起编译。
先决条件
工具链仅适用于 Maven 2.0.9 及更高版本。有关其设计和实现的更多详细信息,请参阅工具链。
以下是一些工具链感知的插件,使用了工具链类型:
工具链类型 | 插入 | 从...开始 | 托管在 |
---|---|---|---|
jdk | maven-compiler-plugin |
2.1 | apachemaven |
jdk | maven-jarsigner-plugin |
1.3 | apachemaven |
jdk | maven-javadoc-plugin |
2.5 | apachemaven |
jdk | maven-pmd-plugin |
3.14.0 | apachemaven |
jdk | maven-surefire-plugin |
2.5 | apachemaven |
jdk | animal-sniffer-maven-plugin |
1.3 | 魔精屋 |
jdk | cassandra-maven-plugin |
0.7.0-1 | 魔精屋 |
jdk | exec-maven-plugin |
1.1.1 | 魔精屋 |
jdk | jdiff-maven-plugin |
1.0-beta-1-SNAPSHOT | 魔精屋 |
jdk | keytool-maven-plugin |
1.4 | 魔精屋 |
protobuf | maven-protoc-plugin |
0.3.2 | github |
在项目中使用工具链
为了使用工具链,您需要配置两个基本组件:
- 在
maven-toolchains-plugin
您的项目 POM 中, toolchains.xml
构建机器上的文件。
这maven-toolchains-plugin
是一个设置工具链以供项目中工具链感知插件使用的工具链。
例如,您想使用与运行 Maven 的版本不同的 JDK 版本来构建您的项目,您可以通过此插件配置您要使用的版本,pom.xml
如下所示:
<plugins> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-toolchains-plugin</artifactId> <version>1.1</version> <executions> <execution> <goals> <goal>toolchain</goal> </goals> </execution> </executions> <configuration> <toolchains> <jdk> <version>1.5</version> <vendor>sun</vendor> </jdk> </toolchains> </configuration> </plugin> ... </plugins>
正如您在上面的示例中看到的,将使用带有<version>
“1.5”和<vendor>
“sun”的 JDK 工具链。现在插件如何知道这个 JDK 安装在哪里?这是toolchains.xml
文件的来源。
该toolchains.xml
文件(见下文)是您设置工具链安装路径的配置文件。这个文件应该放在你的${user.home}/.m2
目录中。当maven-toolchains-plugin
执行时,它会查找toolchains.xml
文件,读取它并查找与插件中配置的工具链要求相匹配的工具链。在我们的示例中,这将是一个带有<version>
“1.5”和<vendor>
“sun”的 JDK 工具链。一旦找到匹配项,插件就会存储要在 MavenSession 中使用的工具链。正如您在toolchains.xml
下面看到的,确实有一个配置了<version>
“1.5”和<vendor>
“sun”的 JDK 工具链。所以当maven-compiler-plugin
我们在我们的pom.xml
上面执行时,它会看到在 MavenSession 中设置了一个 JDK 工具链,因此将使用该工具链(/path/to/jdk/1.5
对于我们的示例来说就是安装的 JDK)来编译源代码。
从Maven 3.3.1开始,您可以toolchains.xml
使用该--global-toolchains file
选项将文件放在您喜欢的任何位置,但建议将其定位到${user.home}/.m2/
.
<?xml version="1.0" encoding="UTF-8"?> <toolchains> <!-- JDK toolchains --> <toolchain> <type>jdk</type> <provides> <version>1.5</version> <vendor>sun</vendor> </provides> <configuration> <jdkHome>/path/to/jdk/1.5</jdkHome> </configuration> </toolchain> <toolchain> <type>jdk</type> <provides> <version>1.6</version> <vendor>sun</vendor> </provides> <configuration> <jdkHome>/path/to/jdk/1.6</jdkHome> </configuration> </toolchain> <!-- other toolchains --> <toolchain> <type>netbeans</type> <provides> <version>5.5</version> </provides> <configuration> <installDir>/path/to/netbeans/5.5</installDir> </configuration> </toolchain> </toolchains>
请注意,您可以在toolchains.xml
文件中配置任意数量的工具链。