【问题标题】:NoClassDefFoundError while executing jar in intellij在 intellij 中执行 jar 时出现 NoClassDefFoundError
【发布时间】:2020-09-28 03:21:37
【问题描述】:

我正在尝试在终端中执行一个 jar 文件。

在 intellij 中创建的 Jar:

Build -> Build Artifacts -> Clean
Build -> Build Artifacts -> Build

执行命令:

java -jar helloworld.jar

错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/json/simple/JSONObject
        at main.java.com.example.helloworld.sampleclass.mymethod(sampleclass.java:53)
        at main.java.com.example.helloworld.sampleclass.main(sampleclass.java:14)
Caused by: java.lang.ClassNotFoundException: org.json.simple.JSONObject

我还添加了以下依赖项。

Pom.xml 依赖:

<dependency>
   <groupId>com.googlecode.json-simple</groupId>
   <artifactId>json-simple</artifactId>
   <version>1.1.1</version>
</dependency>

当我尝试在 intellij 中运行时,代码执行完美,但是当我使用 jar 运行时出现此错误。任何建议都会很棒。

【问题讨论】:

  • 这个问题已经在这里回答了See more

标签: java intellij-idea org.json


【解决方案1】:

确保您已在 (文件 -> 项目结构 -> 工件) 设置中正确配置了工件。很可能,您没有在 Output Layout 选项卡中指定应添加到类路径中的库。

我可以假设您在添加依赖项之前创建了一个工件。尝试删除当前的工件配置并创建一个新配置。 IntelliJ IDEA 将根据 one of the following 设置准备一个包含所有必要依赖项的 jar 文件。

查看以下链接了解如何在 IntelliJ IDEA 中管理工件:

【讨论】:

    【解决方案2】:

    我知道,这不是很直观,但是 maven 实际上并没有将你的依赖项嵌入到你的 jar 中,除非你明确要求它。如果您像 zip 一样打开 jar(因为 jar 文件本质上是包含类文件的 zip 文件),您会看到您看到错误的类实际上不存在。

    就个人而言,而不是使用 intellij 导出(我不确定它是否只是像 maven 一样构建 jar),我会直接使用 maven 和 mvn package 命令(如果你不使用,可以选择 mvn package -DskipTests每次构建 jar 时都希望执行单元测试)。 mvn package 将构建 jar 并将其放在 ./target 目录中的某个位置。

    然后,除非您每次运行应用程序时都想在命令行中指定 jar 依赖项的路径,否则您还需要使用 maven 的 shade 插件。 shade 插件会解压您在 pom.xml 中指定的所有依赖项,并将它们与您自己的应用程序的代码一起放入您的新 jar:http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html

    抱歉,我知道这里有点复杂,但是如果你想在使用 maven 依赖项的同时拥有一个可执行文件,那么阴影是你最好的选择。

    【讨论】:

      猜你喜欢
      • 2017-08-12
      • 1970-01-01
      • 2015-06-01
      • 2010-11-28
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      相关资源
      最近更新 更多