我有一个多模块pom,我想为父级组装一个jar-with-dependencies。但我不需要为每个模块构建程序集,他们没有事件具有程序集描述符。所以我使用了maven-assembly-plugin的runOnlyAtExecutionRoot参数,但成效有限:
mvn compile assembly:single -DrunOnlyAtExecutionRoot=true
我将参数输入到父POM中,它被忽略:
mvn compile assembly:single
在pom.xml中:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.orgPOM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.company</groupId>
<artifactId>thisApp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>thisApp Parent Project</name>
<modules>
<module>my.company.thisApp.main</module>
<module>my.company.library-1</module>
<module>my.company.library-1.library-1-1</module>
<module>my.company.library-1.library-1-2</module>
<module>my.company.library-2</module>
<module>my.company.library-3</module>
<module>my.company.library-3.library-3-1</module>
</modules>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>my.company.thisApp</groupId>
<artifactId>main</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
第二种方式不起作用,它试图组装每个模块并且它失败了,因为没有找到任何组件描述符&#39;对他们来说。
在POM中指定参数runOnlyAtExecutionRoot的正确方法是什么?我也曾尝试将其置于“执行”状态。没有成功。
答案 0 :(得分:1)
它失败了,因为描述符引用&#34; jar-with-dependencies&#34;无法为包含POM的项目(如父项目)组装。运行时:
mvn clean package assembly:single
我收到以下错误消息:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:3.0.0:single (default-cli) on project my-parent: Failed to create assembly: Error creating assembly archive jar-with-dependencies: You must set at least one file.
它表示必须至少有一个文件,这意味着至少必须将文件添加到程序集中。由于没有包装的罐子,所以无法完成。
解决方案是在父POM中使用汇编描述符,它添加jar模块的jar包和jar模块(参见shade)或uber jar(参见{{3}})。
示例:在src / main / assembly /下的父项目中创建一个描述符文件,并在&#34; descriptors&#34;下引用它。在插件配置中。我的描述符名为&#34; my-descriptor.xml&#34;
<configuration>
<runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
<descriptors>
<descriptor>${project.basedir}/src/main/assembly/my-descriptor.xml</descriptor>
</descriptors>
</configuration>
描述符将希望的文件添加到分发zip文件中。我的描述符选择了模块的打包jar&#34; my-service&#34;看起来像这样:
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
<id>distribution</id>
<formats>
<format>zip</format>
</formats>
<files>
<file>
<source>my-service/target/my-service-${project.version}.jar</source>
<outputDirectory>/</outputDirectory>
</file>
</files>
</assembly>