Maven 程序集依赖于程序集?
Maven assembly dependent on assembly?
我正在尝试创建一个依赖于内置程序集 jar-with-dependencies
输出的程序集。生成的程序集特定于体系结构。
例如我想创建一个 ZIP,其中包含 jar-with-dependencies
的 JAR 输出加上一个脚本文件和一个库目录。
我尝试了以下方法。在 pom.xml
文件中:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<descriptors>
<descriptor>src/main/assembly/linux64.xml</descriptor>
<descriptor>src/main/assembly/windows64.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass>es.entrees.BoxOffice</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
然后是描述符文件。其中之一:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>linux64</id>
<formats>
<format>zip</format>
</formats>
<files>
<file>
<source>target/${project.artifactId}-${project.version}-jar-with-dependencies.jar</source>
<outputDirectory>/</outputDirectory>
</file>
</files>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
...
</depdendencySets>
</assembly>
但是自定义描述符首先是 运行,而 jar-with-dependencies
的输出还没有。
我应该使用子模块吗?
您需要为 maven-assembly-plugin
执行 2 次:
- 第一个绑定到
prepare-package
阶段,将创建 jar-with-dependencies
。
- 绑定到
package
的另一个将创建 zip 文件。
在构建生命周期中,prepare-package
阶段在 package
阶段之前 运行,因此这确保了 JAR 在 ZIP 之前构建。此外,它还记录了创建 JAR 准备 最终打包(即 ZIP 文件)这一事实。
示例 pom.xml
将是:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>make-jar-with-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>es.entrees.BoxOffice</mainClass>
</manifest>
</archive>
</configuration>
</execution>
<execution>
<id>make-zip</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/assembly/linux64.xml</descriptor>
<descriptor>src/main/assembly/windows64.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
对于以下内容,运行宁 Maven 与 mvn clean install
将正确创建 ZIP。
我正在尝试创建一个依赖于内置程序集 jar-with-dependencies
输出的程序集。生成的程序集特定于体系结构。
例如我想创建一个 ZIP,其中包含 jar-with-dependencies
的 JAR 输出加上一个脚本文件和一个库目录。
我尝试了以下方法。在 pom.xml
文件中:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<descriptors>
<descriptor>src/main/assembly/linux64.xml</descriptor>
<descriptor>src/main/assembly/windows64.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass>es.entrees.BoxOffice</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
然后是描述符文件。其中之一:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>linux64</id>
<formats>
<format>zip</format>
</formats>
<files>
<file>
<source>target/${project.artifactId}-${project.version}-jar-with-dependencies.jar</source>
<outputDirectory>/</outputDirectory>
</file>
</files>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
...
</depdendencySets>
</assembly>
但是自定义描述符首先是 运行,而 jar-with-dependencies
的输出还没有。
我应该使用子模块吗?
您需要为 maven-assembly-plugin
执行 2 次:
- 第一个绑定到
prepare-package
阶段,将创建jar-with-dependencies
。 - 绑定到
package
的另一个将创建 zip 文件。
在构建生命周期中,prepare-package
阶段在 package
阶段之前 运行,因此这确保了 JAR 在 ZIP 之前构建。此外,它还记录了创建 JAR 准备 最终打包(即 ZIP 文件)这一事实。
示例 pom.xml
将是:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>make-jar-with-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>es.entrees.BoxOffice</mainClass>
</manifest>
</archive>
</configuration>
</execution>
<execution>
<id>make-zip</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/assembly/linux64.xml</descriptor>
<descriptor>src/main/assembly/windows64.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
对于以下内容,运行宁 Maven 与 mvn clean install
将正确创建 ZIP。