有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    区别在于assembly:single是一个插件目标,而compile是一个生命周期阶段

    Maven的生命周期是抽象的。调用compile时,Maven将执行所有阶段,直到compile(包括)。在每个阶段,它将执行注册到该阶段的插件

    Plugin目标是可以在某个阶段插入的特定任务。例如,汇编插件的任务就是打包一个可分发的归档文件。这就是在pom中添加插件^{}时定义的内容

    预定义的生命周期通过<packaging>选择。例如^{}包装

    因此,当您调用assembly:single时,您会告诉maven打包一个分发存档。如果没有可以打包的构建,那么归档文件可能是空的

    如果你告诉maven compile assembly:single,它将执行所有阶段,直到编译。因此,源代码被编译成字节码。然后将编译后的类打包