排除系统范围的 Maven 插件依赖
Excluding Maven Plugin Dependency With System Scope
我有一个环境,我需要安装多个 JDK 来编译不同的项目。但是,aspectj-maven-plugin 声明了对 com.sun:tools 的依赖,版本设置为 jre 版本,systemPath 设置为 JAVA_HOME。
当然,这将是错误的,除非 JAVA_HOME 处的 JDK 是给定项目的预期 JDK。
以前,我自己的代码需要 tools.jar 时遇到一些问题,所以我通过在 Nexus 实例中安装 tools.jar 并向我们的 pom 文件添加适当的依赖关系来解决问题。
我想做的是强制 aspectj-maven-plugin 在我们的 Nexus 实例中使用 tools.jar 就像我们自己的代码现在所做的那样,而不是使用系统范围依赖项。
我尝试在 com.sun:tools 依赖项的嵌套排除项中添加对插件的依赖项,但它似乎不起作用。
我还尝试通过包含对 com.sun:tools:1.8 的依赖来覆盖插件的依赖,它可以在我们的 Nexus 中找到,但出于某种原因,它只尝试从 Maven Central 下载它并忽略我们的 Nexus 实例。
我觉得我很接近,但我缺少让它工作的精确咒语。
有什么想法吗?
覆盖插件的依赖性是在 <plugin>
标签内完成的,例如
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.3</version>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.7.0</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
另请参阅:https://maven.apache.org/pom.html#Plugins
我在上面的示例中将范围设置为 runtime
- 想法是它应该覆盖由插件自己的 POM 为该依赖项定义的 system
范围。请注意,我没有测试它。
另外,如果你想从你的内部仓库下载插件,你必须添加一个 <pluginRepositories>
部分到你的 pom - 一个常规的 <repositories>
部分再次只影响直接依赖:
<pluginRepositories>
<pluginRepository>
<id>your-internal-nexus-id</id>
<url>http://your.nexus.com/repository/path</url>
</pluginRepository>
</pluginRepositories>
另请参阅:https://maven.apache.org/pom.html#Plugin_Repositories
Maven 可能会缓存以前的解析失败。确保使用参数“-U”尝试下一次构建 - 或者 - purge the "lastUpdated" files from your repo.
我有一个环境,我需要安装多个 JDK 来编译不同的项目。但是,aspectj-maven-plugin 声明了对 com.sun:tools 的依赖,版本设置为 jre 版本,systemPath 设置为 JAVA_HOME。
当然,这将是错误的,除非 JAVA_HOME 处的 JDK 是给定项目的预期 JDK。
以前,我自己的代码需要 tools.jar 时遇到一些问题,所以我通过在 Nexus 实例中安装 tools.jar 并向我们的 pom 文件添加适当的依赖关系来解决问题。
我想做的是强制 aspectj-maven-plugin 在我们的 Nexus 实例中使用 tools.jar 就像我们自己的代码现在所做的那样,而不是使用系统范围依赖项。
我尝试在 com.sun:tools 依赖项的嵌套排除项中添加对插件的依赖项,但它似乎不起作用。
我还尝试通过包含对 com.sun:tools:1.8 的依赖来覆盖插件的依赖,它可以在我们的 Nexus 中找到,但出于某种原因,它只尝试从 Maven Central 下载它并忽略我们的 Nexus 实例。
我觉得我很接近,但我缺少让它工作的精确咒语。
有什么想法吗?
覆盖插件的依赖性是在 <plugin>
标签内完成的,例如
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.3</version>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.7.0</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
另请参阅:https://maven.apache.org/pom.html#Plugins
我在上面的示例中将范围设置为 runtime
- 想法是它应该覆盖由插件自己的 POM 为该依赖项定义的 system
范围。请注意,我没有测试它。
另外,如果你想从你的内部仓库下载插件,你必须添加一个 <pluginRepositories>
部分到你的 pom - 一个常规的 <repositories>
部分再次只影响直接依赖:
<pluginRepositories>
<pluginRepository>
<id>your-internal-nexus-id</id>
<url>http://your.nexus.com/repository/path</url>
</pluginRepository>
</pluginRepositories>
另请参阅:https://maven.apache.org/pom.html#Plugin_Repositories
Maven 可能会缓存以前的解析失败。确保使用参数“-U”尝试下一次构建 - 或者 - purge the "lastUpdated" files from your repo.