2009-08-12 209 views
1

我有一個Java應用程序「應用程序」,它具有「dep.jar」的依賴關係。 「dep.jar」有一個配置文件 - 「conf.properties」,它被複制並打包到dep.jar中。問題是在運行「app」時,找不到「conf.properties」。Maven配置的依賴關係(jar)

我應該如何指定「conf.properties」(在「dep.jar」的代碼中)的路徑,以便在運行時找到它?

Ronen。

更具體地說:我不需要該文件作爲InputStream,但我需要該文件的路徑。我需要它來配置JMX:

HashMap<String, Object> env = new HashMap<String, Object>(); 
... 
env.put("jmx.remote.x.password.file", "password.properties"); 

其中「password.properties」是運行時所需的配置文件。此代碼位於jar文件中,不在應用程序中。在我將它放入資源之後,「password.properties」位於jar文件中,但是如何在運行時訪問它?

回答

2

這取決於您如何嘗試加載文件。如果使用Class.getResourceAsStream(),則路徑相對於您調用getResourceAsStream()的類。要進入「根」,把一個"/"在文件名前面:

InputStream in = Class.class.getResourceAsStream("/conf.properties"); 

[編輯]如果你需要的文件的路徑(即使它是在一個JAR),您可以使用getResource()哪些返回一個URL。使用new File(url.toURI())從URL獲取路徑。

0

你在dep.jar中定義conf.properties在哪裏?

如果該項目是一個JAR項目(但沒有聲明的包裝元素或<包裝>罐子< /包裝>)

如果conf.properties在以下的在src /主/資源文件夾定義「dep」項目,它會輸出到最終的jar文件中。

例如,在文件中定義:

src/main/resources/config/conf.properties 

將被打包在JAR中

config/conf.properties 

假設你有一個類com.foo.Bar和您要訪問的屬性文件通過:

InputStream stream = Bar.getClass().getResourceAsStream("conf.properties"); 

然後文件conf.properties將被定義在文件夾下:

src/main/resources/com/foo/conf.properties 

如果你想從你會做亞倫的回答罐子的根訪問資源流提示:

InputStream stream = Bar.getClass().getResourceAsStream("/conf.properties"); 

和資源將在

src/main/resources/conf.properties 
定義