使用 Maven 2 构建可运行的 jar

新手上路,请多包涵

我对 Maven 咒语比较陌生,但我正在尝试使用 Maven 构建一个命令行可运行的 jar。我已经设置了依赖项,但是当我运行 mvn install 并尝试运行 jar 时,会发生两件事。首先,没有找到主类,这是可以纠正的。更正此问题后,运行时出现错误,指出找不到类。

Maven 没有将我的依赖库打包到 jar 中,因此我无法将 jar 作为独立应用程序运行。我该如何纠正这个问题?

原文由 Stefan Kendall 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 421
2 个回答

最简单的方法是使用 maven-assembly-plugin 和预定义的 jar-with-dependencies 描述符创建程序集。您还需要为这个 uber jar 生成一个包含主类条目的清单。下面的代码片段显示了如何配置程序集插件来执行此操作:

 <build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <mainClass>fully.qualified.MainClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

然后,要生成程序集,只需运行:

 mvn assembly:assembly

如果要生成程序集作为构建的一部分,只需将 assembly:single mojo 绑定到包阶段:

 <build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <mainClass>fully.qualified.MainClass</mainClass>
          </manifest>
        </archive>
      </configuration>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

只需运行:

 mvn package

原文由 Pascal Thivent 发布,翻译遵循 CC BY-SA 3.0 许可协议

Maven 不会将您的依赖项打包到您的 jar 文件中,因为您通常不会对 Java 程序执行此操作。

相反,您将依赖项与 jar 文件一起交付,并 在 Manifest 的 Class-Path 标头中 提及它们。

要走这条路,您需要为 maven-jar-plugin 启用 addClasspath 属性( 在此处 记录)。

如果您真的想在 jar 文件中包含所有依赖项,那么您可以使用 Maven Assembly 插件创建一个 jar-with-dependencies

原文由 Joachim Sauer 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题