【问题标题】:How to link external Spring Boot JAR in manifest (NoClassDefFoundError)如何在清单中链接外部 Spring Boot JAR (NoClassDefFoundError)
【发布时间】:2019-01-17 00:15:00
【问题描述】:

我将尝试将我的问题归结为一个基本的外部 JAR 链接问题,但我无法找到示例/答案。我在同一个目录中有 2 个 JAR,a.jar 和 b.jar。 a.jar 的MANIFEST.MF 包含:Class-Path: b.jar

基本上,我想运行包含最少应用程序级类的 a.jar,但链接到带有所有其他必要类的大型外部 b.jar。但是运行命令java -jar a.jar 会导致:Exception in thread "main" java.lang.NoClassDefFoundError: com/example/MainApp

不确定它是否相关,但 b.jar 实际上是一个 Spring Boot JAR,其中包含 BOOT-INF/classes 中的预期类(例如 com/example/MainApp.class)。 b.jar 的MANIFEST.MF 包含:Spring-Boot-Classes: BOOT-INF/classes/

我想知道是否有一种简单的方法可以实现这一点?如果需要更多详细信息来诊断问题,请告诉我。

更新: 我把com/example/MainApp.class文件复制到b.jar的base目录下,类就找到了!但我想保留原始文件。所以我想这改写了这个问题:你如何指定类在 JAR 中的位置?

【问题讨论】:

  • 这个链接应该很有用[baeldung.com/executable-jar-with-maven]
  • 好吧,我并没有尝试构建单个胖 JAR,而且我很确定其他步骤只是创建清单文件,因为我已经拥有它,指向 libs/ 中的外部 JAR。除了我的基本 Class-Path 清单条目之外,Maven 还做了什么?
  • 我使用maven插件进行spring boot应用程序。该插件在构建目录中创建具有正确配置的jar,您可以毫无问题地运行这个jar文件。
  • 是的,但我认为您误解了我的问题。我的 b.jar 作为 Spring Boot 应用程序运行,没有任何问题...但我的 a.jar 无法链接到 b.jar 中的类,因为它们位于 BOOT-INF/classes/com/etc 而不是 com/etc

标签: java spring-boot jar manifest noclassdeffounderror


【解决方案1】:

您是否尝试过类似“classpath: path/to/jar/b.jar”之类的路径

【讨论】:

  • 在问题中查看我的更新。 b.jar 的路径已经有效,因为它与 a.jar 位于同一目录中......看来我需要在 b.jar 文件夹结构本身中指定路径
  • 您是否尝试通过 /target 文件夹指定它?
  • 我不确定你的意思,你能详细说明一下吗?
猜你喜欢
  • 2021-08-01
  • 2016-08-02
  • 2016-01-14
  • 2020-10-03
  • 1970-01-01
  • 2018-03-05
  • 2019-06-12
  • 2020-10-14
  • 2014-05-28
相关资源
最近更新 更多