maven - 如何仅在某些模块中运行 "maven-exec-plugin"?

标签 maven osgi maven-plugin apache-karaf maven-profiles

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

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

我们使用“mvn clean install -Pprofilename”运行构建。这接近工作,但它提示“父 poms”上的警告,因为它们没有任何可部署的内容。

我还没有尝试过这个,但我推测可能有效的方法是在父 pom 中的配置文件定义中添加一个“activation”部分,它指定一个像“canDeployToKaraf”这样的属性。然后我认为我们只会在生成可以部署到 Karaf 的 Artifact 的 poms 中定义此属性。

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

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

附录:

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

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

有人知道有办法做到这一点吗?

最佳答案

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

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

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

关于maven - 如何仅在某些模块中运行 "maven-exec-plugin"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20411303/

相关文章:

java - 哪个版本的 Grails 支持 JDK 8?

java - 访问osgi bundle 资源

java - 多线程捆绑和服务实例

java - 如何使用带有内联 XSD 的 jaxb2 maven 插件?

maven-2 - 属性-maven-插件 : Error loading properties-file

ios - 无效的 IPA : missing embedded provisioning profile. 你确定这是临时的吗?

maven - 对属性进行计算

Android Studio - 导入 Simple-Xml 库

java - Maven surefire 插件不在 xml 中包含用于通过测试的系统输出

java - 如何在 OSGi 环境中为 log4j2 JUL 适配器设置系统属性