JDC*_*JDC 7 pom.xml maven multi-module maven-profiles
问题
我有一个maven项目,其结构与下面的相似:(
为简化起见而简化)
--parent
|-- child A (inherits from parent)
|-- child B (inherits from parent)
|-- child B1 (inherits from B)
|-- child B2 (inherits from B)
|-- child B3 (inherits from B)
Run Code Online (Sandbox Code Playgroud)
仅仅孩子B1和B2必须使用包含一些额外构建内容的特定配置文件构建.结果,配置文件已在模块B中指定.
逻辑上,模块属于模块B,并且还继承了一些依赖项等(aggreagtion + inheritance).
(想象一下像B = Frontend,B1 = UI,B2 = Themes,B3 = Something)
题
编辑
编辑,因为问题被确定为重复:问题是相应问题中提到的解决方案不起作用.
如果我通过使用属性激活子配置文件,它也将被激活模块B(父级)和所有子级.
我只希望它对孩子B1和B2有效.
A_D*_*teo 14
如果你想要一个应该应用于子模块的配置文件(并且只有一些模块),在它们的父项目(pom)中以集中方式定义,而不是将配置文件应用于父项本身,这里提出了一个建议做法:
在父pom中定义配置文件,样本一:
<profiles>
<profile>
<id>sample-profile</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>print-hello</id>
<phase>${phase.prop}</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo message="hello there!" />
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
注意我们在做什么:
phase元素是参数化的,因此插件与构建阶段的绑定也将进行参数化所以,在同一个父pom中,让我们定义属性:
<properties>
<phase.prop>none</phase.prop>
</properties>
Run Code Online (Sandbox Code Playgroud)
因此,在父pom上运行的构建会将插件执行附加到无阶段(none不是关键字或已知值,只是用于非现有阶段的事实标准,您可以将其留空或放任何你喜欢的价值,它会有相同的效果),因此跳过它.在所有声明的模块中,默认情况下也会跳过它.该配置文件仍将在每个模块中处于活动状态,但由于默认情况下不会执行任何插件,因此无害.
然后,在您希望插件执行处于活动状态的模块中,您可以仅重新定义相关属性和所需阶段:
<properties>
<phase.prop>package</phase.prop>
</properties>
Run Code Online (Sandbox Code Playgroud)
然后从主构建(父级)激活配置文件
mvn clean install -Psample-profile
Run Code Online (Sandbox Code Playgroud)
父级将其应用于所有模块,但有效的配置文件执行仅在phase.prop值具有maven有意义的值时发生.
如果您需要为不同的插件执行设置不同的阶段,那么您可以定义多个属性并应用相同的模式.
如果您没有插件执行,而是已经由Maven执行的插件的全局插件配置(作为其打包和默认构建的一部分),则可以重新定义其执行,覆盖默认执行ID.
请注意,我们可以使用skip配置元素完成相同的操作,但是:
skip配置条目phase元素与任何配置无关,可以重复用于连接到同一阶段的执行| 归档时间: |
|
| 查看次数: |
6325 次 |
| 最近记录: |