【问题标题】:How to create reusable build configuration in maven?如何在 Maven 中创建可重用的构建配置?
【发布时间】:2013-06-18 17:48:42
【问题描述】:

我有使用 maven 构建的 java 项目,其中有几个以相同方式构建的子模块:有可执行 jar、lib 目录中的依赖 jar、一些资源等。

模块之间的配置仅在主类中有所不同。因此,我想创建某种预配置的构建(或宏,或其他),以不将构建插件的相同配置复制到不同的 pom.xml 模块,而是以主类作为参数重用相同的配置。

我怎样才能做到这一点?

(构建配置:http://pastebin.com/9Fm5rFK7

【问题讨论】:

  • Maven - Inheritance 这样的事情?
  • 我使用继承(用于依赖项和基本构建配置,如源级别),但我无法将其用于构建配置:maven 尝试将其用于“父”项目(此规则可以用于该项目) t 被应用)并且无法构建。
  • 你能提供一些你的 pom.xml 文件的摘录,或者你的项目结构的草图吗?另一种选择是create a custom Maven plugin
  • 我考虑过这种可能性,但在这种情况下,我将失去所有的简单性和可维护性。我真的很失望,很难用 maven 做这些基本的事情。我已经更新了帖子,其中包含指向我的构建配置的链接。
  • 继承 + pluginManagement?

标签: java maven build


【解决方案1】:

您可以使用 maven properties 参数化它们,在 inherited 之后覆盖它们。在您的情况下,您可以引入 mainClass 属性并在父模块的插件配置中使用它,例如<mainClass>${mainClass}</mainClass>。然后可以在子模块中覆盖此属性。

编辑:
对于父 pom,我指的是 pluginManagement 部分(抱歉不清楚)。我在这里使用您的构建配置创建了一个示例: https://gist.github.com/ceilfors/5827916

我认为这是您可以在子模块中获得的最低要求。由于 jar 包装类型,maven-jar-plugin 是可选的。参考lifecycle bindings可以看到插件会在package阶段被调用。

另外,当您的项目变得更复杂时,您也可以探索如何merge 插件配置。我在这里创建了另一个示例:https://gist.github.com/ceilfors/5828039。请注意,未使用 mainClass 的属性。

希望这会有所帮助。

【讨论】:

  • 但是我怎样才能禁用根本没有主类的“父”项目的构建?
  • 将我以前的 cmets 移到帖子中,因为我试图在那里解释更多。见编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 2012-12-06
  • 1970-01-01
相关资源
最近更新 更多