我有一个项目,我正在尝试创建一个分发zip文件,其中包含(在其他文件中)一个可执行jar,其中包含我的java项目的依赖项。
所以我希望它看起来像这样:
-wiki-search-1.0.0-dist.zip
-wiki-search.bat
-wiki-search-help.html
-wiki-search-1.0.0-jar-with-dependencies.jar
-jar content...
我正在使用程序集插件和预定义描述符“jar-with-dependencies”来创建我的可执行jar文件。
我在我的pom中指定了一个单独的程序集插件条目,引用自定义描述符来尝试构建可分发的zip文件。
所以我的pom部分看起来像这样:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>quicksearch.QuickSearchApp</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>attached</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/dist.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>attached</goal>
</goals>
</execution>
</executions>
</plugin>
我的自定义描述符如下所示:
<assembly>
<id>dist</id>
<formats>
<format>tar.gz</format>
<format>tar.bz2</format>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<includes>
<include>${project.basedir}/target/wiki-search-0.0.1-SNAPSHOT-jar-with-dependencies.jar</include>
</includes>
<outputDirectory>.</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.basedir}/src/main/etc</directory>
<includes>
<include>*</include>
</includes>
<outputDirectory></outputDirectory>
</fileSet>
</fileSets>
</assembly>
一切正常。正在构建jar-with-dependencies。我的dist zip文件正在构建中。但是dist zip文件不包含jar-with-dependencies文件。
答案 0 :(得分:47)
使用现有配置,将合并程序集插件的两个单独配置,并且还将合并配置。
要实现您的目标,您应该定义具有多个嵌套执行的单个程序集 - 插件配置,然后为其中的每个执行定义配置。然后,程序集插件将按顺序执行每个程序集,因此jar-with-dependencies
jar可以包含在dist
jar中。另请注意,attached
目标已弃用,有利于single
目标。
另请注意,程序集中的路径是相对于根的,要包含特定文件,您应该使用<files>
元素而不是<filesets>
元素。您还可以在程序集中指定属性,以使其不易变更。
下面重新排列的配置和组装应该完成您的目标:
装配描述符:
<assembly>
<id>dist</id>
<formats>
<format>tar.gz</format>
<format>tar.bz2</format>
<format>zip</format>
</formats>
<files>
<file>
<source>
target/${project.artifactId}-${project.version}-jar-with-dependencies.jar
</source>
<outputDirectory>/</outputDirectory>
</file>
</files>
<fileSets>
<fileSet>
<directory>${project.basedir}/src/main/resources</directory>
<includes>
<include>*</include>
</includes>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
程序集插件:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>quicksearch.QuickSearchApp</mainClass>
</manifest>
</archive>
</configuration>
</execution>
<execution>
<id>dist</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/assembly/dist.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
答案 1 :(得分:0)
您有两种不同的程序集插件配置,并且您希望它们按顺序运行(jar之前的zip),但我认为Maven不会暗示如何解决这个问题。我的猜测是在JAR文件之前生成了zip文件。
即使不是这种情况,我建议你为每个工件创建一个模块。将JAR程序集移动到自己的模块中,并使现在的Zip-only模块依赖它。这样,Maven的依赖顺序解决方案可以按顺序启动并构建它们。