当前位置: 首页 > 知识库问答 >
问题:

Java NoClassDefFoundError-类在一个罐子里,但不是从另一个Java程序调用的罐子里

符鸣
2023-03-14

是的。这种问题已经被问了很多时间了。这是我得到的。

我有一个用gradle构建的jar文件(将被称为“库”)。这个库在(依赖项)中嵌入了一个解压缩的jar。库的内部包(文件夹树)和嵌入类处于同一级别。例如,com.xxx.yyy是库,com.xxx.aaa是嵌入的、解压缩的jar类(依赖项)。

如果我以“独立的方式”运行jar(Java-jar等),它就能正常工作。

但如果我将这个jar作为库添加到另一个Java程序中,那么死神就要来了,它告诉我缺少了一些类(很明显,所有的东西都在jar中,因为它在独立模式下运行良好)。

其他依赖项(其中2项)已经被将要使用库的程序使用。仅从第三个依赖项提取嵌入的类(它们被嵌入到jar,因为jar中的类不能在没有特定资源加载器的情况下调用其他jar,例如Eclipse提供的,我们不想使用它)。

任何想法都会很棒。

共有1个答案

易和怡
2023-03-14

可以重写ClassLoader。例如,spring-引导插件生成了一个可执行的(Java jar name.jar)jar文件,由于类的结构,该文件不能包含在其他jar中。

如果您不确定独立的jar是如何工作的,可以使用Maven/Gradle插件将类提取到目标文件夹中,并将它们与您的jar一起打包。

 类似资料:
  • 我有一些限制做一个新的构建。因此,我使用winRAR工具替换了X.jar中的META-INF\maven\com.fasterxml.jackson.core\jackson-databind文件夹。

  • 我正在导出一个包含类的JAR: 和trialApplicationContext.xml:

  • 嗨,我正在尝试从Spring网站上做这个教程。http://spring.io/guides/gs/rest-service/ 在Eclipse M2E中将最终的Jar文件作为目标运行时,我得到了一个错误。 我有一个maven java核心项目。我成功地执行了“cleanpackage”命令,但在jar构建之后,我无法运行它。我在dos命令提示符下确认了jar是否运行正常,方法是将jar放在不同的

  • 我有一个需求,我想找到运行的jar中的jar的路径。假设有一个名为example-1.0.0.jar的罐子在一个名为main-1.0.0.jar.的运行罐子里,我想知道运行罐子里存在的罐子的路径。 编辑1:例如,jar是项目中的一个依赖项。例如,假设我的项目中有一个log4j依赖项,我想知道log4j jar在类中的路径。我怎样才能找到路?

  • 嗯,这很尴尬。我想使用log4j-over-slf4j进行日志记录,因此我将jar添加到项目中,并在WebLogic应用程序中指定使用包<code>org.slf4j* 但问题是WebLogic上的commons jar库具有slf4j-log4j12.jar,这会产生冲突: 我该如何告诉 WebLogic 忽略该包?

  • 知道为什么吗 工作,但是双击罐子会给一个 错误?清单被正确放置,双击直到最近还在工作,但突然之间它给出了这个错误。我不确定我做了什么改变。 编辑: 我用来创建jar的命令是(在cmd中): Main是包文件的一部分。