Java 在intellij中执行jar时发生NoClassDefFoundError

Java 在intellij中执行jar时发生NoClassDefFoundError,java,intellij-idea,org.json,Java,Intellij Idea,Org.json,我试图在终端中执行一个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 m

我试图在终端中执行一个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>

com.googlecode.json-simple
简单json
1.1.1

当我尝试在intellij中运行时,代码执行得非常完美,但是当我使用jar运行时,我遇到了这个错误。任何建议都很好。

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

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

请参阅以下链接,了解如何在IntelliJ IDEA中管理工件:


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

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

请参阅以下链接,了解如何在IntelliJ IDEA中管理工件:


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

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

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


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

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

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

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


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

      这个问题已经在这里得到了回答。这个问题已经在这里得到了回答