使用系统范围排除Maven插件依赖性

时间:2015-06-29 19:05:24

标签: maven aspectj nexus

我有一个环境,我需要安装多个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上添加依赖项来覆盖插件的依赖项:工具:1.8可以在我们的Nexus中找到,但由于某种原因它只会尝试从Maven Central下载并忽略我们的Nexus实例

我觉得我很接近,但我错过了让它发挥作用的确切咒语。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

覆盖插件的依赖关系是在<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范围。介意我没有测试它。

此外,如果您希望从内部存储库下载插件,则必须向您的pom添加<pluginRepositories>部分 - 常规<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