如何使用maven assembly插件定义执行顺序
我正在将一个项目从Ant迁移到Maven。我需要交付的最后一个发行版是一个包含可执行jar及其所有依赖项的zip。以下是我的pom的一部分:如何使用maven assembly插件定义执行顺序,maven,maven-assembly-plugin,Maven,Maven Assembly Plugin,我正在将一个项目从Ant迁移到Maven。我需要交付的最后一个发行版是一个包含可执行jar及其所有依赖项的zip。以下是我的pom的一部分: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<configuration>
<finalName>ProjectDistribution</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>fullQualifiedNameToMainClass</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
<descriptors>
<descriptor>${project.basedir}/src/main/assembly/dep.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
<execution>
<id>dist</id>
<phase>assembly</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
maven汇编插件
2.2-β-4
项目分布
假的
带有依赖项的jar
完全合格的名称包括
真的
${project.basedir}/src/main/assembly/dep.xml
带有依赖项的jar
包裹
单一的
距离
装配
单一的
这是程序集文件:
<assembly>
<id>dist</id>
<formats>
<format>zip</format>
</formats>
<!-- 1st approach-->
<!--files>
<file>
<source>
/target/ProjectDistribution.jar
</source>
<outputDirectory>/</outputDirectory>
</file>
</files-->
<fileSets>
<!-- 2nd approach-->
<!--fileSet>
<directory>/target</directory>
<outputDirectory></outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet-->
<fileSet>
<directory>/HelpFiles</directory>
<outputDirectory></outputDirectory>
<includes>
<include>*.*</include>
</includes>
</fileSet>
</fileSets>
距离
拉链
/帮助文件
*.*
我运行1.-mvn编译、2.-mvn包和3.-mvn组装:单个
我要处理的问题是
它确实生成了包含所有依赖项的jar,并且确实生成了zip,但没有将jar包含在zip中。我非常需要找到一种方法,让程序集首先生成jar,然后等待它被创建(因为它的大小是5MB),然后创建zip。现在,第一种和第二种方法(来自程序集文件)被注释掉了,但是,我已经使用了这两种方法,它们似乎都不起作用
任何帮助都将不胜感激
Eric您将预定义的
jar与依赖项
与自定义的zip
描述符混合在一起。你通常会想要其中一个,而不是两个
看起来您需要一个包含项目工件及其依赖项的zip。为此,您不需要创建带有依赖项的
jar
。但是,如果您确实想要一个包含所有依赖项的可执行jar,那么不清楚您为什么需要再次压缩它。要使其正常工作,您需要拆分
并将其放入两个插件执行中:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<executions>
<execution>
<id>jar-with-dependencies</id>
<phase>verify</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>ProjectDistribution</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>fullQualifiedNameToMainClass</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</execution>
<execution>
<id>dist</id>
<phase>verify</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>${project.basedir}/src/main/assembly/dep.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
org.apache.maven.plugins
相反
我需要压缩它,因为最终发行版不仅包括可执行jar,还包括与许可证相关的文档和手册。我最初的想法是使用预定义的jar和依赖项,这非常有效,结果jar使用汇编文件将其添加到zip中。这有意义吗?你知道有什么更有效的方法来实现这一点吗?你说的很有道理。很抱歉第一次没有收到,我是maven的新手。您能否就如何生成包含所有依赖项的工件(可执行jar)提供建议?非常感谢你!很抱歉,它仍然不起作用。我做了您建议的更改,当我使用mvn验证或mvn安装时,不会创建任何内容。当我使用mvn assembly:single时,它会显示以下错误消息:“读取程序集时出错:找不到程序集描述符。”可能是因为这两种配置都在执行中,maven不知道从哪里开始?非常感谢你的帮助!maven应该按照定义的顺序完成插件执行(前提是每次执行的顺序相同)。您是否在或中进行了配置?我已经尝试了maven shade插件,但似乎无法正常工作。它确实生成了jar,但不存在依赖项。如果您可以建议如何使用maven shade插件创建一个具有所有依赖项的可执行jar,那么我可以继续使用assembly插件压缩jar。非常感谢!是的,它们位于以下结构的内部。。我认为现在最好的办法是使用你提到的maven shade插件。。但是我以前没能让它工作。。你能就我在上一次评论中提出的问题提出建议吗。非常感谢你!我认为,
就是问题所在。你能试着把整个
部分放到.…
中吗?关于maven shade插件。如果jar和依赖项描述符适合您,您可以轻松地使用它。我只是想提一下,万一您有一个更复杂的jar需要构建(例如,一个jar文件,其中包含必须与其他jar中的配置文件合并的配置文件)