gpt4 book ai didi

maven - 如何使用 maven-assembly-plugin 定义执行顺序

转载 作者:行者123 更新时间:2023-12-04 23:06:13 34 4
gpt4 key购买 nike

我正在将一个项目从 Ant 迁移到 Maven。我需要交付的最终发行版是一个 zip,其中包含一个可执行 jar 及其所有依赖项。这是我的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。现在第 1 和第 2 种方法 - 来自程序集文件 - 被注释掉了,但是,我已经使用了这两种方法,但它们似乎都不起作用。

任何帮助将不胜感激!

埃里克

最佳答案

要使其正常工作,您需要拆分 <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 verifymvn install创建装配体。

还有两件事需要考虑:
  • 您应该使用验证阶段来构建您的程序集,因为 jar-with-dependencies 描述符包括项目 Artifact 本身。在打包阶段,项目 Artifact 将无法打包
  • jar-with-dependencies 描述符在创建包含所有依赖项的 JAR 文件方面的能力非常有限。您应该使用 maven-shade-plugin反而。
  • 关于maven - 如何使用 maven-assembly-plugin 定义执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11527473/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com