如何避免将不相关的maven插件添加到子项目中?

时间:2014-09-29 22:32:24

标签: maven maven-3

我有一个maven项目A,其中包含插件P的插件管理配置。我有一个单独的maven项目B,不依赖于插件P。项目A不是项目B的父项。我有第三个项目C,其父项目为A,使用插件P

A (pluginManagement P)
|- B
|- C (plugin P)

当我尝试在项目P上从插件A运行目标时,maven也尝试执行该目标项目B,然后失败。

  

[ERROR]在当前项目中找不到前缀“P”的插件   并在插件组中[org.apache.maven.plugins,org.codehaus.mojo]   可从存储库[local] - >获得[帮助1]

但是,如果我将一个插件P添加到项目B的插件依赖项中,那么一切正常。

A (pluginManagement P)
|- B (pluginManagement P)
|- C (plugin P)

有没有办法避免这种依赖传播?好像我做错了。

2 个答案:

答案 0 :(得分:3)

  1. 在顶层使用pluginManagement而不是插件,然后将plugin子句放在您想要的位置。
  2. (或)设置继承为false。

答案 1 :(得分:0)

经过一番研究,似乎有两种Maven方法可以做到这一点。为清楚起见,假设还有另一个项目D也使用了插件P,该插件P配置了配置PC,并且该插件P具有目标G

创建一个没有pluginManagement P的其他聚合器POM,并在其下创建聚合项目B

Alpha
|- A (pluginManagement P [PC])
   |- C (plugin P)
   |- D (plugin P)
|- B

请勿在使用它的项目中使用pluginManagement P和硬代码P的配置PC

A
|- B
|- C (plugin P [PC])
|- D (plugin P [PC])

创建单独的聚合器POM似乎是最好的解决方案。但是,对我来说,有一个更简单的解决方案可以减少客户流失。我可以直接在项目P上调用C的目标,如下所示:

mvn -pl :C P:G

这使maven reactor可以看到我的整个项目结构,而不会将目标传播到A的所有模块。