2013-06-18 46 views
4

我使用maven几个子模块是建立完全相同的方式Java项目建设:有可执行的JAR文件,在lib目录下的依赖罐子,一些资源等如何在maven中创建可重用的构建配置?

模块之间的配置不同,只有在主类。所以,我想创建一些预配置的构建(或宏,或其他),以便不将相同配置的构建插件复制到不同的pom.xml模块,而是重复使用与main-class相同的配置作为参数。

我该如何做到这一点?

(建筑结构:http://pastebin.com/9Fm5rFK7

+1

[Maven - Inheritance](http://maven.apache.org/pom.html#Inheritance)是这样的吗? – atomman

+0

我使用继承(对于依赖性和基本构建配置(如源代码级别)),但我无法将其用于构建配置:maven试图将其用于“父项目”(为此无法应用此规则),并且未能建立。 – Daniil

+0

您能否提供一些来自您的pom.xml文件的摘录,或者是您的项目结构草图?另一个选择是[创建一个自定义的Maven插件](http://maven.apache.org/guides/plugin/guide-java-plugin-development.html) – noahlz

回答

2

你可以使用Maven properties参数它们,覆盖它们之后是inherited。在你的情况下,你可以引入mainClass属性,并在父模块的插件配置中使用它,例如<mainClass>${mainClass}</mainClass>。这个属性可以在子模块中被覆盖。编辑:
对于父pom,我指的是插件管理部分(对不清楚)。我在这里创建了一个构建配置的示例: https://gist.github.com/ceilfors/5827916

我认为这是您可以在子模块中获得的最小值。由于罐子包装类型,因此maven-jar-plugin是可选的。请参阅lifecycle bindings,您可以看到该插件将在package阶段被调用。

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

希望这会有所帮助。

+0

但是,我怎样才能禁用没有主类的“父”项目的构建? – Daniil

+0

因为我试图在那里解释更多,所以将之前的评论移到了帖子中。参见编辑。 – ceilfors

相关问题