首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不同的POM之间共享POM片段

如何在不同的POM之间共享POM片段
EN

Stack Overflow用户
提问于 2011-01-12 00:12:48
回答 4查看 3.4K关注 0票数 8

我目前正在为Maven而苦苦挣扎:我有一个由几个嵌套模块组成的复杂项目,对于其中一些模块,我在POMs中有类似的配置。

我想让它变得干净。实际上,我想定义一个"runnable-jar“公共配置,并在一些模块中激活它。

下面是我想在几个项目之间分享的POM片段:

代码语言:javascript
复制
<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中,我希望能够这样做:

代码语言:javascript
复制
<!-- 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中,你通常是如何处理这个问题的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-12 21:53:29

我刚刚发现了一些可能解决我的问题的东西:

模块不要求是其父模块的子模块。

父模块和子模块关系是两个独立的概念。

通过使用relativePath属性(as explained in the doc),可以指定不是文件夹结构中实际父文件夹的父POM模块。

在我的例子中,我使用以下布局:

  • main-project
    • utils (父项目:主项目)
    • cli-programs (父项目:主项目)
      • generic-cli (父项目:cli程序;虚拟和空POM module)
      • cli-1 (parent:generic-cli)
      • cli-2 (parent:generic-cli)

然后,在generic-cli/pom.xml中,我可以声明对所有cli程序通用的配置(如自定义测试套件、runnable-jar包等)。

票数 6
EN

Stack Overflow用户

发布于 2011-01-12 13:54:13

要做到这一点,一种方法是在多模块项目的父pom的<pluginManagement>中声明<plugin>代码。然后,各个模块可以有一个<plugin>部分,它可以在不重新声明内容的情况下使用它。

父pom:

代码语言:javascript
复制
<pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-assembly-plugin</artifactId>
              ... all the details...
         </plugin>
         ...
     </plugins>
</pluginManagement>

子poms:

代码语言:javascript
复制
     <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
        </plugin>
     </plugin>
票数 5
EN

Stack Overflow用户

发布于 2016-03-11 16:32:14

Maven-tiles解决了这个问题。它也在maven 3.x,tracked here的路线图中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4659771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档