簡體   English   中英

JAR中的線程“ main”中的異常java.lang.NoClassDefFoundError

[英]Exception in thread “main” java.lang.NoClassDefFoundError from JAR

我正在嘗試從外殼文件運行jar可執行文件。 我的罐子的路徑:

/home/flussi/xmlEncoder/encoder.jar

但我總是得到這個錯誤:

    Exception in thread "main" java.lang.NoClassDefFoundError: smaf.encoder.Encoder
   at java.lang.Class.initializeClass(libgcj.so.7rh)
Caused by: java.lang.ClassNotFoundException: java.nio.file.LinkOption not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:/home/flussi/xmlEncoder/encoder.jar], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
   at java.net.URLClassLoader.findClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at java.lang.Class.initializeClass(libgcj.so.7rh)

外殼命令

java -jar /home/flussi/xmlEncoder/encoder.jar

在堆棧跟蹤中有證據表明您正在嘗試使用GCJ工具鏈來運行該JAR文件。 (下面您評論中的證據證實了這一點。)

這是真正的問題。

不幸的是,GCJ的開發在完成對Java 1.5的支持之前就停滯了。 看起來您正在嘗試運行依賴於Java 1.7類( java.nio.file.LinkOption )的JAR文件

我的建議:

  • 卸載已安裝的GCJ Java軟件包
  • 從軟件包管理器安裝OpenJDK Java 8(1.8)軟件包或更高版本1 ,或從Oracle站點下載並安裝Java 8或更高版本的RPM。

如果您不管理機器,請讓管理者去做。 或嘗試在其他地方運行JAR文件。

這很可能需要對應用程序進行重大重寫,才能使其在GCJ上運行。 因為GCJ實際上是一個已死的Java平台,所以這將是浪費的精力。


1-Java 7可以使用,但是幾年前已經停產。

嗨,運行Java應用程序的最佳方法是先設置CLASS_PATH和PATH變量。 如果您當前的jar文件依賴於外部jar文件,您將面臨很多問題。 最好像下面那樣設置路徑變量並運行應用程序:

 #!/usr/bin/ksh
 export PATH=/usr/java/bin:$PATH
 # =/usr/java/bin is your java bin folder

 #set environment variable CP with all the jar libraries
 CP=/home/flussi/xmlEncoder/encoder.jar 
 CP=${CP}:/other/jar/somejar.jar

 java -Xmx256M -classpath "$CP" "com.myproj.Example"

這是com.myproj.Example內部Java類文件encoder.jar ,你必須聲明public static void main

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM