我目前正在为Maven而苦苦挣扎:我有一个由几个嵌套模块组成的复杂项目,对于其中一些模块,我在POMs中有类似的配置。
我想让它变得干净。实际上,我想定义一个"runnable-jar“公共配置,并在一些模块中激活它。
下面是我想在几个项目之间分享的POM片段:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!-- Use a custom descriptor, with suffix "bin" -->
<descriptors>
<descriptor>src/main/assembly/runnable-jar-assembly.xml</descriptor>
</descriptors>
<!-- Add main class to manifest -->
<archive>
<manifest>
<mainClass>${mainClass}</mainClass>
</manifest>
</archive>
</configuration>
<!-- Add build of this package to lifecycle -->
<executions>
<execution>
<id>make-runnable-jar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>在一些POMS中,我希望能够这样做:
<!-- Set the main class -->
<properties>
<mainClass>my.main.Class</mainClass>
</properties>
<!-- Activate runnable jar build -->
<import>src/main/pom/runnable-jar-pom.xml</import> 我一直在寻找一种方法来将一些XML片段导入到POM中,或者定义一个完整的XML节点集宏。
据我所知,最接近的解决方案是在父POM中定义一个配置文件,并在一些子模块中通过测试文件的存在来激活它。See this related question。但是我面临着{basedir}属性没有正确设置继承/设置的问题。
我发现需要一个黑客来做这么基本的事情是非常令人惊讶的。在Maven中,你通常是如何处理这个问题的?
发布于 2011-01-12 21:53:29
我刚刚发现了一些可能解决我的问题的东西:
模块不要求是其父模块的子模块。
父模块和子模块关系是两个独立的概念。
通过使用relativePath属性(as explained in the doc),可以指定不是文件夹结构中实际父文件夹的父POM模块。
在我的例子中,我使用以下布局:
然后,在generic-cli/pom.xml中,我可以声明对所有cli程序通用的配置(如自定义测试套件、runnable-jar包等)。
发布于 2011-01-12 13:54:13
要做到这一点,一种方法是在多模块项目的父pom的<pluginManagement>中声明<plugin>代码。然后,各个模块可以有一个<plugin>部分,它可以在不重新声明内容的情况下使用它。
父pom:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
... all the details...
</plugin>
...
</plugins>
</pluginManagement>子poms:
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
</plugin>
</plugin>发布于 2016-03-11 16:32:14
Maven-tiles解决了这个问题。它也在maven 3.x,tracked here的路线图中。
https://stackoverflow.com/questions/4659771
复制相似问题