我有一个多模块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>
答案 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
它会。