我正在努力将项目从Ant迁移到Maven。我需要提供的最终发行版是一个包含可执行jar的zip,其中包含所有依赖性。这是我的pom的一部分:
<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>
这是汇编文件:
<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 compile,2.- mvn package和3.- mvn assembly:single
我正在处理的问题是
它确实生成了包含所有依赖项的jar,它确实生成了zip,但它不包含zip中的jar。我几乎需要弄清楚一种方法,让程序集首先生成jar并等到它被创建(因为它的大小是5 MB),然后创建zip。现在,第一个和第二个方法 - 来自汇编文件 - 被注释掉了,但是,我已经使用过它们,但它们似乎都不起作用。
任何帮助将不胜感激!
埃里克
答案 0 :(得分:8)
要实现这一点,您需要拆分<configuration>
并将其放入两个插件执行中:
<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>
第一次执行将创建jar文件。第二次执行将采用该JAR文件和
将其与其他文件一起放入ZIP文件中。使用此配置,您只需执行mvn verify
或mvn install
即可创建程序集。
还有两件事需要考虑:
答案 1 :(得分:1)
您正在将预定义的jar-with-dependencies
与自定义zip
描述符混合。你通常会想要其中一个 - 而不是两个。
看起来你想要一个包含项目工件及其依赖项的zip。为此,您无需创建jar-with-dependencies
。但是,如果您确实需要一个包含所有依赖项的可执行jar,则不清楚为什么需要再次压缩它。