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

Java语言在Intellij中构建jar文件后发生lang.NoClassDefFoundError

易流觞
2023-03-14

我的第一个应用程序的结构很简单:

libs
  opencsv-3.8.jar
  yamlbeans-1.0.jar
out
  artifacts
    ...
  production
    ...
src
  META-INF
    MANIFEST.MF
  pl.krzysiu
    App.java
    CsvReplacer.java

在编译和运行程序的过程中一切都很好。在默认的out\工件目录中构建工件jar文件后,我得到

java.lang.NoClassDefFoundError: net/sourceforge/yamlbeans/YamlException

当我试图运行它java-jar CsvReplacer.jar命令

库包含在jar文件中(解包后就在那里)-它们被添加到项目结构中的库部分(单独-每个库一个文件),整个libs dir包含在模块部分的依赖项选项卡中(选中导出复选框),libs dir类似地添加到工件部分的输出布局中。

清单文件包含:

Manifest-Version: 1.0
Class-Path: libs\yamlbeans-1.0.jar libs\opencsv-3.8.jar
Main-Class: pl.krzysiu.App

为什么应用程序的库不可见?如果我手动将此目录复制到CsvReplacer.jar文件的位置-一切正常。

CsvReplacer内部的结构。jar文件看起来像:

libs
  opencsv-3.8.jar
  yamlbeans-1.0.jar
META-INF
  MANIFEST.MF
pl
  krzysiu
    App.java
    CsvReplacer.java

IDE:Intellij IDEA 2016.3

共有1个答案

富凯旋
2023-03-14

标准Java类加载器找不到嵌入在另一个JAR文件中的JAR文件。

在创建具有依赖项的可执行JAR时,有两种选择。

>

  • 通过将依赖JAR的内容合并到主JAR中,创建一个所谓的uberJAR文件。

    参考文献:

    • IntelliJ IDEA将可运行程序导出为Uber Jar
    • https://blog.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

    给你的JAR一个“类路径”清单属性,告诉它(外部的!)依赖的JAR位于哪里。

    你不能同时给出一个cp和jar选项。但是另一种选择是去掉jar选项,使用cp参数来指定类路径。

    或者,您可以实现一个自定义类加载器,可以从jar中的jar加载,或者使用类似于一个jar或Spring Boot的东西。

  •  类似资料:
    • 是否有教程解释如何正确创建Java Gradle项目并构建。jar文件? 当我创建Java项目并添加Gradle:File时- 或 我的项目在这一点上是如此的混乱,也许我应该创建另一个项目,然后将Main.class和Gradle的依赖关系从旧项目复制/粘贴到新项目上。 如果这是我的最佳选择,那么这次我如何正确创建项目?

    • 我是Java和堆栈溢出的新手,我在IntelliJ中创建了一个Java项目,并通过构建工件和构建。jar文件创建了一个。jar文件,以便在不使用IntelliJ的情况下运行该项目。该程序使用一个机器人来打开运行窗口,通过按Windows和R键,移动鼠标到我的计算机的分辨率(1366 x 768)的盒子内部,单击,键入cmd并按回车,移动鼠标到cmd窗口内部,单击,键入whoami并按回车。这在In

    • 我有三个*。属性文件。当我在studio中切换这些文件时,一切都按预期进行。但是当我构建一个jar文件时,我认为它找不到属性文件,它在端口8080上可见。尽管在设置中我指定了8090(dev)或5000(prod)。如何解决这个问题。有人能告诉我如何正确地组装jar文件吗? application.properties application-dev.properties application-

    • 问题内容: 我记得前一段时间使用eclipse或netbeans时,我能够轻松地将源文件包含在jar文件中。我已移至intellij 10社区版,发现自己需要做同样的事情。有什么提示吗? 问题答案: 我想到了… 单击“输出布局”选项卡中的“ +”按钮->包含目录内容->选择您的src目录。做到了

    • HTSJDK是一个用于访问常见文件格式(如SAM和VCF)的库。我想构建HTSJDK JAR。在文档页面中说我必须为此使用Ant。所以我安装了Ant并运行以下命令: ant htsjdk-jar [javac]用法:javac [javac]use-help获取可能选项列表 生成失败 build.xml文件有问题。这里是文件的开头: 拜托,有人能告诉我该怎么做才能解决这个问题吗?

    • 我创建了一个ant构建文件,将我的java src编译成一个.jar文件。它使用外部jar文件。