2016-06-22 87 views
3

Get location of JAR file有人說,「只要你的類路徑只包含一個條目,就可以工作[獲取可運行jar文件的位置]」。爲什麼java.class.path屬性總是返回jar的位置?

這是我的代碼:

public static void main(String[] args) { 
     System.out.println(System.getProperty("java.class.path")); 
    } 

我創建了一個可運行的jar(使用Eclipse導出),當我運行它,不管是什麼我設置CLASSPATH來,我只得到了運行的JAR的路徑。

例如:

C:\TEMP>set CLASSPATH=C:\TEMP\BackupCompilations\Photos;C:\FreeOCR\tessdata 

C:\TEMP>echo %CLASSPATH% 
C:\TEMP\BackupCompilations\Photos;C:\FreeOCR\tessdata 

C:\TEMP>set CLASSPATH 
CLASSPATH=C:\TEMP\BackupCompilations\Photos;C:\FreeOCR\tessdata 

C:\TEMP>java -jar C:\Programs\bin\Test_one_prop.jar 
C:\Programs\bin\Test_one_prop.jar 

我也使用-cp在命令行上嘗試。

有人能想出一個反例,它返回的東西更多/不是我正在運行的jar文件的位置?

(瞭解,在Eclipse中返回我的項目的bin文件夾。)

這是唯一的使用情況下,我很擔心:運行此程序作爲一個可運行的罐子。

感謝。

+0

我明白這兩個答案。偉大的信息,跟着每個鏈接中的一些;將在稍後閱讀。 (現在必須做一些支付工作。) – Tamias

回答

4

manual entry for java狀態

-jar

[...]
當您使用此選項,JAR文件是所有用戶 類的源,和其他用戶類路徑設置忽略。

當使用-jar選項時,.jar本身被用作整個類路徑。


有人能拿出一個反例,其中該返回 更多的東西/比我跑的jar文件的位置等?

正常情況下,沒有。然而,這只是一個屬性,所以你可以改變它的價值。

System.setProperty("java.class.path", "garbage"); 

由於nramaker他們answer建議,你可以提供其他罐的位置,通過清單文件中的類包括。 Java教程講解如何做到這一點:

然而,這不會改變java.class.path屬性的值。當您運行

一個例子,

URLClassLoader cl = (URLClassLoader) Example.class.getClassLoader(); 
try { 
    URL url = cl.findResource("META-INF/MANIFEST.MF"); 
    Manifest manifest = new Manifest(url.openStream()); 
    System.out.println(manifest.getMainAttributes().getValue(new Attributes.Name("Class-Path"))); 
} catch (IOException e) { 
    // handle 
} 
相關問題