簡體   English   中英

類路徑問題:.jar文件可以從清單中的類路徑訪問文件,但不能從-cp命令行參數訪問文件

[英]Classpath problem: .jar file can access a file from Class-Path in manifest, but not from -cp command line parameter

我在此目錄結構中有文件foo.jar:

+--+- /foo_lib
|  |
|  +- Ice.jar ...
|
+-- /swt-linux-gtk -- swt.jar
|
+-- foo.jar

清單顯示的部分內容:

Class-Path: . foo_lib/Ice.jar swt-linux-gtk/swt.jar foo_lib/o
 rg.eclipse.core.commands_3.5.0.I20090525-2000.jar...

可以通過命令毫無問題地啟動它

java -jar foo.jar

到現在為止還挺好。 問題是我想從命令行將路徑設置為swt.jar(而不是其他路徑)(因為不同的平台需要不同版本的swt.jar)。 因此,我從清單中刪除了swt-linux-gtk/swt.jar並運行以下命令:

java -cp swt-linux-gtk/swt.jar -jar foo.jar

不幸的是,這行不通,並且出現了以下異常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Display
    at scsadmin.BootStrapper$.main(BootStrapper.scala:90)
    at scsadmin.BootStrapper.main(BootStrapper.scala)
    at scsadmin.JavaMain.main(JavaMain.java:9)
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.widgets.Display
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    ... 3 more

清單中有“ Class-Path部分時, -cp是否被忽略? 還是我想念其他東西?

從java -jar的手冊頁中:

使用此選項時,JAR文件是所有用戶類的源,而其他用戶類路徑設置將被忽略。

似乎jar也在使用自定義類加載器來加載捆綁的jar。

當您使用“ java -jar”時,-classpath選項將被忽略。

有關更多詳細信息,請參見http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/tooldocs/linux/java.html

“使用此選項時,JAR文件是所有用戶類的源,而其他用戶類路徑設置將被忽略。”

干杯,唐納德。

暫無
暫無

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

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