工具链使用指南

什么是工具链?

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

在项目中使用工具链

为了使用工具链,您需要配置两个基本组件:

  1. maven-toolchains-plugin您的项目 POM 中,
  2. 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文件中配置任意数量的工具链。