我有一个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)
有没有办法避免这种依赖传播?好像我做错了。
答案 0 :(得分:3)
答案 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
的所有模块。