2

我们有一个应用程序,其中包含多个生成可部署工件的模块。我们通过仅指定依赖项的“父 pom”和仅具有模块列表的“聚合器 pom”将“父”层次结构与“模块”层次结构分开。我们有一个主要的聚合器 pom,它列出了我们所有的模块,包括父 pom 和“工件” pom。

大多数“工件” pom 都会产生我们最终想要部署到 OSGi 服务器 (karaf) 的东西。我们希望能够运行构建所有内容并将每个可部署模块部署到 Karaf 的构建。我们可以使用“maven-exec-plugin”指定部署。在所有可以构建可部署工件的模块的父 pom 中,我们指定一个包含 maven-exec-plugin 定义的配置文件。

我们使用“mvn clean install -Pprofilename”运行构建。这接近工作,但它抱怨“父pom”上的警告,因为它们没有任何要部署的东西。

我还没有尝试过,但我推测可能可行的方法是在父 pom 中的配置文件定义中添加一个“激活”部分,该部分指定一个类似“canDeployToKaraf”的属性。然后我认为我们只会在生成可以部署到 Karaf 的工件的 pom 中定义这个属性。

是否会为聚合器 pom 尝试构建的每个模块考虑配置文件激活,还是会为整个构建激活或不激活?如果是前者,那么这种策略似乎有可能奏效。如果是后者,那就不行了。

这行得通吗?有一个更好的方法吗?

附录

刚刚向我指出,尝试在命令行上手动指定配置文件,然后尝试“不激活”某些 pom 的配置文件是没有意义的。在命令行上指定配置文件“激活”配置文件。

我真正需要做的是弄清楚如何在父 pom 中配置“maven-exec-plugin”,以便它在子 pom 中的行为是合适的。在需要部署到 Karaf 的子 pom 中,但在不产生可部署工件的子 pom 中,它什么也不做。

有没有人看到这样做的方法?

4

2 回答 2

2

我认为这可能是对个人资料的滥用,但我不会咄咄逼人:)

因此,我不会在父级中处理插件的实际执行,而是使用“插件管理”元素从父级管理 exec 插件的配置。然后我会将插件声明添加到每个实际需要部署的 pom 中。

如果您担心这不是重用,因为我的解决方案会在所有需要它的子项中创建插件元素,请考虑这一点——这是您要“重用”的 exec 插件的配置。另外,我个人认为它更具可读性;我对 pom 可读性的试金石测试是您可以阅读 pom 并知道它在构建时做了什么——如果它继承它的插件执行就不是那么容易了。

于 2013-12-05T21:44:58.840 回答
0

您需要使用该<pluginManagement>部分来配置要在整个项目中使用的插件。该部分中的插件列表<pluginManagement>仅配置它们但不会激活它们。<plugins>现在,您可以通过在该模块 pom.xml 的部分中列出该模块来激活该模块中的插件。您只需要列出groupIdand artifactId。没有将从该<pluginManagement>部分继承的版本,没有配置。

通过这种方式,您可以集中配置插件,同时让每个模块都可以自由选择要激活的插件。

于 2015-05-28T14:03:27.390 回答