2

那里

我有一个父 pom.xml,它定义了 maven-ear-plugin 的默认配置

<pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.8</version>
            <configuration>
                <modules>
                    <jarModule>
                        <groupId>com.test</groupId>
                        <artifactId>artifact1</artifactId>
                    </jarModule>
                    <jarModule>
                        <groupId>com.test</groupId>
                        <artifactId>artifact2</artifactId>
                    </jarModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>

在子 pom 中,我在<plugins>部分定义了 maven-ear-plugin

<plugin>
    <artifactId>maven-ear-plugin</artifactId>
    <executions>
        <execution>
            <id>default-ear</id>
            <phase>package</phase>
            <goals>
                <goal>ear</goal>
            </goals>
            <configuration>
                <earSourceDirectory>EarContent</earSourceDirectory>
                <defaultLibBundleDir>APP-INF/lib</defaultLibBundleDir>
                <modules>
                    <jarModule>
                        <groupId>com.test</groupId>
                        <artifactId>artifact3</artifactId>
                    </jarModule>
                </modules>
            </configuration>
        </execution>
    </executions>
</plugin>

我的意图是在耳朵中包含所有 3 个 jar 文件 artifact1、artifact2 和 artifact3。但是,在构建之后,仅包含子 pom.xml 中定义的 artifact3。因此,默认情况下<modules>,子 pom.xml 中的定义会覆盖父 pom 中定义的内容,而不是将它们合并在一起。事实上,如果我删除<modules>子 pom.xml 中的整个部分,构建后将包含 artifact1 和 artifact2。

我的问题是是否有办法包含父 pom 和子 pom 中定义的所有 jar 模块。我有几个耳朵项目,它们都需要包含相同的 jar 模块集以及它们自己的一些 jar 模块。我正在尝试将公共 jar 模块集移动到父级,以便它们不会在每个子 pom.xml 中重复。

更新以澄清我的项目关系:

parent pom.xml (define maven-ear-plugin in the pluginManagement section)
  -- project1 pom.xml (multi-module project)
      -- myJar-proj1 
      -- myWeb-proj1
      -- myEar-proj1 (define maven-ear-plugin in the <build> section)    
  -- project2 pom.xml (multi-module project)
      -- myJar-proj2
      -- myWeb-proj2
      -- myEar-proj2 (define maven-ear-plugin in the <build> section)
4

1 回答 1

6

为了实现合并行为,您应该将标签放在父标签maven-ear-plugin pluginspom(而不是underpluginManagement)。

家长pom

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.8</version>
            <configuration>
                <modules>
                    <jarModule>
                        <groupId>com.test</groupId>
                        <artifactId>artifact1</artifactId>
                    </jarModule>
                    <jarModule>
                        <groupId>com.test</groupId>
                        <artifactId>artifact2</artifactId>
                    </jarModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</build>

编辑

combine.children="append"OP明确项目结构后:元素上的属性modules,在子项目中:

<modules combine.children="append">
    <jarModule>
        <groupId>com.test</groupId>
        <artifactId>artifact3</artifactId>
    </jarModule>
</modules>

父级仍应仅在pluginManagement.

于 2013-08-07T21:39:58.843 回答