Maven插件学习(七)—— Toolchains设置项目单独构建JDK(或其他工具)
Toolchains 简介
Toolchain type | Plugin | Starting with | Hosted at |
jdk | maven-compiler-plugin | 2.1 | Apache Maven |
jdk | maven-jarsigner-plugin | 1.3 | Apache Maven |
jdk | maven-javadoc-plugin | 2.5 | Apache Maven |
jdk | maven-pmd-plugin | 3.14.0 | Apache Maven |
jdk | maven-surefire-plugin | 2.5 | Apache Maven |
jdk | maven-failsafe-plugin | 2.5 | Apache Maven |
jdk | animal-sniffer-maven-plugin | 1.3 | MojoHaus |
jdk | cassandra-maven-plugin | 0.7.0-1 | MojoHaus |
jdk | exec-maven-plugin | 1.1.1 | MojoHaus |
jdk | jdiff-maven-plugin | 1.0-beta-1-SNAPSHOT | MojoHaus |
jdk | keytool-maven-plugin | 1.4 | MojoHaus |
protobuf | protobuf-maven-plugin | 0.6.1 | github |
toolchains类型
toolchains idea | 相关插件 |
netbeans-platform | nbm-maven-plugin The various goals could make use of it. |
native tools? c#? | |
jdk | maven-compiler-plugin maven-surefire-plugin maven-javadoc-plugin keytool-maven-plugin exec-maven-plugin webstart-maven-plugin |
j2me sdk | j2me-maven-plugin |
Toolchains 使用示例
- 在项目的pom.xml文件中配置插件:maven-toolchains-plugin,maven-toolchains-plugin用于设置项目中支持工具链的插件使用的工具链。
- 文件 toolchains.xml 设置其他JDK(或其他工具)安装目录的配置文件。这个文件应该放在${user.home}/.m2目录。当maven-toolchains-plugin执行时,它查找toolchains.xml文件,读取该文件并查找与插件中配置的toolchains需求匹配的工具链,然后将匹配的工具链存储在MavenSession中,该文件也可以放在任何你喜欢的位置,使用选项--global-toolchains file 指定文件的位置。
<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.8</version><vendor>openjdk</vendor></jdk></toolchains></configuration></plugin>...
</plugins>
- 文件 toolchains.xml
<toolchains><!-- JDK toolchains --><toolchain><type>jdk</type><provides><version>1.8</version><vendor>openjdk</vendor></provides><configuration><jdkHome>/path/to/jdk/1.8</jdkHome></configuration></toolchain><toolchain><type>jdk</type><provides><version>17</version><vendor>azul</vendor></provides><configuration><jdkHome>/path/to/jdk/17</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
/*** @component*/
private ToolchainManager toolchainManager;
/*** The current build session instance. This is used for* toolchain manager API calls.** @parameter expression="${session}"* @required* @readonly*/
private MavenSession session;
public void execute() {.....// get toolchain from contextToolchain tc = toolchainManager.getToolchainFromBuildContext( "jdk", //NOI18Nsession );if ( tc != null ){getLog().info( "Toolchain in javadoc-plugin: " + tc );// when the executable to use is explicitly set by user in mojo's parameter, ignore toolchains.if ( javadocExecutable != null ){getLog().warn( "Toolchains are ignored, 'javadocExecutable' parameter is set to " + javadocExecutable );}else{// assign the path to executable from toolchainsjavadocExecutable = tc.findTool( "javadoc" ); //NOI18N}}.....}
参考文档
https://maven.apache.org/guides/mini/guide-using-toolchains.html
https://cwiki.apache.org/confluence/display/MAVENOLD/Toolchains