当前位置: 首页 > web >正文

Maven插件学习(七)—— Toolchains设置项目单独构建JDK(或其他工具)

Toolchains 简介

Maven 工具链为项目提供了一种指定用于构建项目的 JDK(或其他工具)的方法,而无需在每个插件或每个pom.xml文件中进行配置。
当 Maven 工具链用于指定 JDK 时,项目可以由特定版本的 JDK 构建,独立于 Maven 正在运行的 JDK。这类似于在 IDEA、NetBeans 和 Eclipse 等 IDE 中设置 JDK 版本的方式。
下面是一些支持工具链的插件,它们使用了工具链类型:

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 指定文件的位置。
例如,你想使用与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.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

在Maven的Mojo的excute方法中添加以下代码片段
/*** @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

http://www.xdnf.cn/news/6056.html

相关文章:

  • CAN(控制器局域网络)协议详解
  • 反射(Reflection)详解
  • leetcode0295. 数据流的中位数-hard
  • python数据分析常用的10个核心库
  • gradle--问答
  • Vxworks 系统详解
  • Realtek 8126驱动分析第四篇——multi queue相关
  • vLLM Serve 命令参数详解
  • 小白成长之路-文件和目录内容检索处理(一)
  • 2025年项目管理软件哪个更流行?如何解决用例复用率低的难题?
  • write failed: Connection reset by peer
  • 抖音怎么快速涨粉(抖音推流算法研究)
  • python语言与地理处理note 2025/05/11
  • ArrayList的扩容机制
  • 基于脑功能连接组和结构连接组的可解释特定模态及交互图卷积网络|文献速递-深度学习医疗AI最新文献
  • 普通IT的股票交易成长史--20250513复盘
  • 收集卡牌 第23次CCF-CSP计算机软件能力认证
  • 大模型中的KV Cache
  • 开发者版 ONLYOFFICE 协作空间:3.1版本 API 更新
  • RabbitMQ学习(自用)
  • (顺序表、单链表、双链表)==>一篇解决!(Java版)
  • 【即插即用涨点模块】【上采样】CARAFE内容感知特征重组:语义信息与高效计算两不误【附源码】
  • MyBatis与MyBatis-Plus深度分析
  • SimpleAdmin云服务器发布
  • Qt —— 在Windows10下通过在线安装方式安装Qt6.9.0(附:“server replied: Forbidden“网络出错解决办法)
  • Pytorch张量和损失函数
  • 电子科技浪潮下的华秋电子:慕尼黑上海电子展精彩回顾
  • 反转链表II
  • mysql常用方法
  • 关于Go语言的开发环境的搭建