我们有一个应用程序,其中包含多个可生成可部署工件的模块。我们将“父”层次结构与“模块”层次结构分开,方法是使用仅指定依赖关系的“父poms”和仅具有模块列表的“聚合器poms”。我们有一个主聚合器pom列出了我们所有的模块,包括父poms和“神器”poms。
大多数“神器”poms会产生我们最终想要部署到OSGi服务器(karaf)的东西。我们希望能够运行构建所有内容的构建,并将每个可部署的模块部署到Karaf。我们可以使用“maven-exec-plugin”指定部署。在可以构建可部署工件的所有模块的父pom中,我们指定包含maven-exec-plugin定义的配置文件。
我们使用“mvn clean install -Pprofilename”运行构建。这接近于工作,但它抱怨“父母poms”的警告,因为他们没有任何可以部署。
我还没有尝试过这个,但我认为可能有用的是在父pom中为配置文件定义添加“激活”部分,它指定了像“canDeployToKaraf”这样的属性。然后我想我们只会在poms中定义这个属性,产生一个可以部署到Karaf的工件。
聚合器pom尝试构建的每个模块是否会考虑配置文件激活,或者是否会为整个构建激活它?如果是前者,那么这种策略似乎可行。如果是后者,那那就行不通了。
这会有用吗?有更好的方法吗?
附录:
我刚刚向我指出,尝试在命令行上手动指定配置文件是没有意义的,然后尝试“不激活”某些poms的配置文件。在命令行上指定配置文件“激活”配置文件。
我真正需要做的是弄清楚如何在父pom中配置“maven-exec-plugin”,以便它在子poms中的行为是合适的。在有可能部署到Karaf的儿童poms中,但是在没有产生可部署工件的儿童poms中,它什么都不做。
有没有人看到这样做的方法?
答案 0 :(得分:2)
我认为这可能是对个人资料的滥用,但我不会咄咄逼人:)
因此,我不会在父级中处理插件的实际执行,而是使用“插件管理”元素来管理父级别的exec插件的配置。然后我会将插件插入添加到实际有部署内容的每个pom。
如果您担心这不是重复使用,因为我的解决方案会在需要它的所有子项中创建插件元素,请考虑这一点 - 它是您要“重用”的exec插件的配置。另外,我个人认为它更具可读性;我对pom可读性的试金石测试是你可以读取一个pom并知道它在构建时的作用 - 如果它继承了它的插件执行就不那么容易了。
答案 1 :(得分:0)
您需要使用<pluginManagement>
部分配置要在整个项目中使用的插件。在<pluginManagement>
部分中有一个插件列表只配置它们但不激活它们。现在,您可以通过将该插件列在该模块pom的<plugins>
部分中来激活某个模块中的插件。您只需列出groupId
和artifactId
即可。没有版本,没有配置,将从<pluginManagement>
部分继承。
通过这种方式,您可以集中插件的配置,同时让每个模块都可以自由选择要激活的插件。