java - mvn assembly :single and mvn compile assembly:single 和有什么区别

标签 java maven

当我调用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/

相关文章:

java - 上传android项目到GitHub

java - 为什么在使用 JAXB 数据绑定(bind)部署任何服务时 JAX-WS 会卡住?

java - 无法为对象堆保留足够的空间 - Alfresco 从源代码构建

java - Maven Java 不会对非详尽开关发出警告

java - 代码不在 Debug模式下执行,需要源代码

java - 微服务 - stub /模拟

java - 手动抛出异常

java - 使用 JDBC 的参数化查询

java - Gradle 不会导入 bintray 依赖项,但不会抛出任何错误

java - Spring Boot 2.1 的 Elasticsearch 版本