資源文件到目前爲止,直到非模塊化Java中,你會簡單地把一個文件src/main/java/resources
確保它是在類路徑中,然後從幾乎與的Java 9個拼圖 - 訪問來自外部模塊
file = getClass().getClassLoader().getResourceAsStream("myfilename");
加載在類路徑的任何地方。
現在使用模塊,情節變厚。
我的項目設置如下:
module playground.api {
requires java.base;
requires java.logging;
requires framework.core;
}
配置文件放在裏面src/main/resources/config.yml
。
項目與
java -p target/classes:target/dependency -m framework.core/com.framework.Main
運行,因爲主類不駐留在我自己的項目,但外部框架模塊,它不能看到config.yml
。現在的問題是,有沒有辦法以某種方式將我的配置文件放入模塊或打開它?我必須改變上游框架加載文件的方式嗎?
我試過在模塊信息中使用「輸出」或「打開」,但它想要一個包名稱,而不是文件夾名稱。
如何以最實用的方式實現這一目標,以便它能像Java 8一樣工作,並儘可能地進行少許更改?
是否'com.framework.Main'讀取使用'Class.getResource'資源? – nullpointer
如果模塊中的代碼需要訪問自己的某個資源,則應該使用Class.getResourceXXX方法(參數名稱是資源名稱,而不是文件名稱btw)。如果資源位於另一個模塊中,並且具有Module對象,則可以使用Module.getResourceAsStream。如果您想搜索模塊路徑和類路徑,那麼ClassLoader.getResourceXXX將像以前一樣工作,但模塊需要打開包含該資源的包。最頂層目錄或META-INF/*中的資源沒有被封裝,所以ClassLoader.getResource將會工作。 –
相關[如何讓一個自動模塊找到它自己的資源在java-9](https://stackoverflow.com/questions/43573809/how-to-let-an-自動模塊找到它自己的資源在java-9) – nullpointer