2011-05-24 163 views
4

我正在嘗試配置JAR的類路徑,以便我的ResourceBundle可以從中獲取屬性文件。指定jar的類路徑

如果我從.class文件運行它,並指定-cp標誌它工作正常,並且System.err.println(System.getProperty("java.class.path"));將打印在-cp標誌中指定的路徑。

如果我嘗試爲它創建一個jar文件,System.err.println(System.getProperty("java.class.path"));總是打印jar文件的路徑,並且不拾取屬性文件。

看來,如果您將它作爲jar文件運行,您無法指定-cp標誌(這正是我所希望的,因爲切換使用哪些屬性文件是很常見的)。我試過在jar清單中指定它,但它仍然不起作用。

這裏是從測試罐子的代碼和明顯,似乎不工作:

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

 

Manifest-Version: 1.0 
Created-By: 1.6.0_20 (Sun Microsystems Inc.) 
Main-Class: Test 
Class-Path: /home/ajanuary/Projects/test/ 

編輯 原來的路徑是沒有意義的,所以我改變它。我想爲指向資源包可以在屬性文件的目錄

+0

你想用「〜/ *」來匹配什麼? – 2011-05-24 11:29:49

回答

0

問題是我也有一個索引文件。如果你有一個索引文件,Class-Path將被忽略。

5

如果您使用的罐子,-cp被忽略:

罐子
執行封裝在一個程序JAR文件。第一個參數是JAR文件的 名稱,而不是 啓動類名稱。爲了使此 選項起作用,JAR文件的清單必須包含一行 形式的Main-Class:classname。這裏, classname標識具有 的類public static void main(String[] args)作爲您的 應用程序的起點的方法。請參閱 Jar工具參考頁和Jar 關於使用Jar 文件和Jar文件清單的關於Java教程的信息 的信息。 當您使用此選項時,JAR文件是所有用戶類的 源,而其他 用戶類路徑設置將被忽略。

來源:java - the Java application launcher

+1

我相信我在問題中提到過。 – ICR 2011-05-24 11:27:05

+6

寫作「看起來好像」和引用參考文獻之間有區別:-) – 2011-05-24 11:28:48

2

我反而在我的Java應用程序讀取一個屬性(該屬性可能表明從那裏的資源應該被加載)。然後

如何執行應用程序的例子是: java -Dkey=value -jar application.jar

+0

這聽起來像是一個很好的方向。 – ICR 2011-05-24 11:58:38

1

您可以在清單中不是使用類路徑通配符。

看看Setting the classpath的類路徑是如何工作的更多信息:

類路徑通配符不兌現在類路徑JAR-清單頭 。

+0

好點。在那裏進行測試時,腦部創傷的位。如果我給出目錄或文件的路徑,它也不起作用。 – ICR 2011-05-24 11:53:43

1

是的,對於shell而言,〜表示$ HOME,但對於java而言,這並不意味着什麼。

+0

好點。看到我對dogbane的評論的回覆。 – ICR 2011-05-24 11:54:07