Intellij 使用 library 出現 NoClassDefFoundError

五月的天空 Java开发环境搭建 02月10日提问

  • 0 回答
  • 214 浏览

請問 IntelliJ 要如何設定才可以正常的在 IntelliJ 中運行?

我已經在專案中添加了我所使用的 JSONUtil 的 library 

但還是一樣會出現 NoClassDefFoundError 錯誤

我已經試過了很多種方法依舊無效

懇請解答 感謝

------------------------------- IDE Info -------------------------------

IntelliJ IDEA 2017.3.4 (Ultimate Edition)

Build #IU-173.4548.28, built on January 30, 2018

------------------------------- IDE Info -------------------------------

import org.kopitubruk.util.json.JsonObject;
 
public class Demo {
    public static void main(String args[]) {
        JsonObject jsonObject = new JsonObject();
        jsonObject.add("name", "name");
        System.out.println(jsonObject.toString());
    }
}
Exception in thread "main" java.lang.NoClassDefFoundError: org/kopitubruk/util/json/JsonObject
  at Demo.main(Demo.java:5)
Caused by: java.lang.ClassNotFoundException: org.kopitubruk.util.json.JsonObject
  at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 1 more

NzmnPQ0.png

If6S735.png

jD7KOy4.png

FpiyVMU.png

============ 另一個測試環境 ============

我在虛擬機中做了立一個測試

我在 User 資料夾下了一個 ClassPath 資料夾

並且在 ClassPath 中放入了 JSONUtil-1.10.4-java7.jar

並且在 環境變數 中設定了 ClassPath 的路徑

最後測試的結果試可以直接做編譯

但是執行時依舊會出現錯誤

( 每一次添加與修該環境變數都有重新啟動系統 )

zcogJO6.png

Ey6WU7r.png

============ 嘗試另一種方法 ============

我設定 IDE 把整個專案生成一個 JAR 文件

並且用 JAR 文件來執行

其中 JAR 文件也一併的包含了我使用的 Lib 文件等等

( 這次的測試中我換了一個 Json Tool Jar )

import net.sf.json.JSONObject;
 
public class Demo {
    public static void main(String args[]) {
        JSONObject object = new JSONObject();
        object.accumulate("a", "a");
        System.out.println(object.toString());
    }
}
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
  at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
  at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  at Demo.main(Demo.java:5)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException
  at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 13 more

KOA1XsL.png

Zzsf8CO.png

Jaia1rm.png