当我调用mvn assembly:single
时,它会创建一个jar,但该jar不会运行,并且错误显示错误:无法找到或加载主类。
。但是,当我运行 mvncompile assembly:single
时,这次创建的 jar 按预期运行。
所以我的疑问是,为什么 mvn assembly:single
创建的 jar 没有运行并给出该错误,而后面的命令创建的 jar 运行得很好。
简约 pom
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.org.taptest.tests.TestTAP</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
最佳答案
不同之处在于 assembly:single
是一个插件目标,而 compile
是一个生命周期阶段。
Maven 生命周期是抽象的 build phases 。当您调用compile
时Maven 将执行所有阶段,直到 compile
(包括)。在每个阶段它将执行注册到该阶段的插件。
插件目标是您可以插入阶段的特定任务。例如,程序集插件的任务是打包可分发的存档。这就是您添加插件时定义的 <execution>
到一个 pom。
预定义的生命周期是通过 <packaging>
选择的。例如。 jar
包装。
因此,当您调用 assembly:single
时你告诉 Maven 打包一个分发文件。如果没有任何可以打包的构建,则存档可能为空。
如果你告诉maven compile assembly:single
执行所有阶段直到编译。因此,源代码被编译为字节码。然后将编译好的类打包。
关于java - mvn assembly :single and mvn compile assembly:single 和有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68294840/