java mvn汇编:single和mvn编译汇编:single有什么区别
当我调用mvn assembly:single
时,它会创建一个jar,但jar不会运行,错误是Error: Could not find or load main class.
。但是,当我运行mvn compile 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>
# 1 楼答案
区别在于
assembly:single
是一个插件目标,而compile
是一个生命周期阶段Maven的生命周期是抽象的。调用
compile
时,Maven将执行所有阶段,直到compile
(包括)。在每个阶段,它将执行注册到该阶段的插件Plugin目标是可以在某个阶段插入的特定任务。例如,汇编插件的任务就是打包一个可分发的归档文件。这就是在pom中添加插件^{} 时定义的内容
预定义的生命周期通过} 包装
<packaging>
选择。例如^{因此,当您调用
assembly:single
时,您会告诉maven打包一个分发存档。如果没有可以打包的构建,那么归档文件可能是空的如果你告诉maven
compile assembly:single
,它将执行所有阶段,直到编译。因此,源代码被编译成字节码。然后将编译后的类打包