运行程序集时未构建子模块程序集:父项组装?

时间:2014-03-20 12:46:53

标签: xml maven maven-assembly-plugin

我有一个多模块Maven项目,其中包含一些子模块的程序集配置,这些子模块仅依赖于父pom中定义的依赖项(下面的子模块1和2)。现在我添加了一个新的子模块3,它具有特定于子模块的依赖关系,并且必须将其组件配置移动到模块中。到现在为止还挺好。

问题是在根级别执行mvn assembly:assembly不会调用新子模块3的程序集,而只会调用父pom级别定义的程序集配置。我该如何解决这个问题?

我项目的示例结构:

  - pom.xml # parent pom
  - src
    |---main
        |---assembly
            |---assembly-submodule1.xml
            |---assembly-submodule2.xml
  - submodule1      
  - submodule2
  - submodule3
    |---pom.xml
    |---src
        |---main
            |---resources
                |---assembly
                    |---assembly-submodule3.xml

父pom.xml程序集配置未链接到子模块3的程序集文件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
            <descriptors>
                    <descriptor>src/main/assembly/assembly-submodule1.xml</descriptor>
                    <descriptor>src/main/assembly/assembly-submodule2.xml</descriptor>
            </descriptors>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
            <archive>
                    <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
            </archive>
    </configuration>
</plugin>

1 个答案:

答案 0 :(得分:1)

在您的父POM中添加

<modules>
    <module>submodule3</module>
</modules>

然后它会构建子模块3 pom,所以你可能需要在submodule3 pom中配置maven程序集插件

如果已经存在,请尝试将程序集绑定到包阶段,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptors>
            <descriptor>assembly.xml</descriptor>
        </descriptors>
    </configuration>
    <executions>
        <execution>
            <id>package</id>
            <goals>
                <goal>assembly</goal>
            </goals>
            <phase>package</phase>
        </execution>
    </executions>
</plugin>

对父模块和子模块执行此操作。然后在顶层运行mvn clean package而不是mvn assembly:assembly

如果您需要能够运行构建但不运行程序集,则可以为程序集创建概要文件并将其添加到该概要文件中。 E.g。

<profiles>
    <profile>
        <id>assembly</id>
        <build>
            <plugins>
                <!-- Put assembly Plugin here -->
            </plugins>
        </build>
    </profile>
</profiles>

现在你运行mvn clean包,它将不会运行程序集。

但是如果你使用这样的汇编配置文件运行:

mvn clean package -P assembly

它会。