我有一个maven多模块项目(男孩,我已经写了打开方式在这个网站太多次了).几乎所有模块(即其中包含代码的模块)都应运行maven-site-plugin来生成有关代码覆盖率等的报告.这些模块具有详细的共享配置 - 报告运行,要覆盖哪些文件/排除某些插件等
但是,有一些模块可以处理打包 - 运行程序集插件以生成tarball等.这些都不会从运行站点报告中获得任何好处 - 没有可以分析的代码,也没有可以报告的测试.
所以我有很多需要共享插件配置的模块,以及一些不需要运行插件的模块,最好是根本不需要.如果我把插件放在<build>
父POM 的部分中,我可以做前者(共享配置),但在这种情况下,我似乎无法关闭插件.如果我将配置下推到每个模块自己的POM,我可以做后者(避免运行插件),但在这种情况下我无法想出一个分享配置信息的好方法.
我想要的是 - 共享配置,对于有时被子模块禁用的插件 - 甚至可能吗?如果是这样,怎么样?
我有一组项目,他们都需要在构建期间运行相同系列的Maven插件执行.我想避免在每个项目中重新声明所有这些配置,因此我将它们全部继承自父pom"模板"项目,该项目仅包含那些插件执行(8种不同的mojos).但我希望这些插件执行只在子项目上运行,而不是在Maven构建期间在父项目上运行.
我试图完成这四种不同的方式,每种方式都有我不喜欢的副作用.
在父pom的build/plugins
元素中声明插件执行,并使用properties-maven-plugin 打开skip
父项目中其他插件的属性.这不起作用,因为其中一个插件目标(maven-dependency-plugin:build-classpath)没有skip
属性.
在父pom的build/pluginManagement
元素中声明插件执行.不幸的是,这需要我重新声明每个build/plugins
子项目的元素中的八个插件中的每个插件:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
</plugin>
...
Run Code Online (Sandbox Code Playgroud)
这太重复了,如果我需要更改模板pom中的插件,则会出现问题.
声明插件处决中被激活父POM的轮廓缺乏一个的nobuild.txt
文件(它的父POM存在,所以插件不执行有):
<profiles>
<profile>
<activation>
<file>
<missing>nobuild.txt</missing>
</file>
</activation>
<build>
....
</build>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下都有效,除了missing
元素中的文件路径似乎基于当前工作目录而不是基于项目的工作目录.这打破了我希望能够做的一些多模块构建. 编辑:为了澄清,父"模板"项目实际上本身就是一个多模块项目中的模块,当我尝试例如mvn install
在根上执行时,构建就会中断.项目结构如下:
+ job
|- job-core
|- job-template
|- job1 inherits from job-template
|- job2 inherits from job-template
Run Code Online (Sandbox Code Playgroud)设置自定义生命周期和包装.这似乎允许我将插件绑定到生命周期阶段,但不指定任何配置.
那么,是否有另一种方法可以指定一堆Maven插件执行,这些执行可以在多个项目中重复使用(每个项目的poms中重复次数最少)?