![](/img/trans.png)
[英]Android Library : Include properties file within a distributable JAR file
[英]Override a .properties file contained within a .jar library
我正在努力尋找不依賴於Spring或類似方法的答案。
我維護了一個Java庫,該庫提供了遠離服務器的抽象,該庫是使用maven構建的。 為了定義連接詳細信息(當前是硬編碼的),我想引入一個.properties文件以允許輕松自定義,但是我想在.jar本身中提供合理的默認值,但是允許人們在必要時覆蓋特定的屬性。
我當前的Maven結構是這樣的...
src/java/com/site/package/cfg/MyLibraryConfig.java
src/resources/com/site/package/cfg/MyLibraryConfig.properties
我當前在MyLibraryConfig類中使用getResourceAsStream("MyLibraryConfig.properties")
來加載屬性文件,並且工作正常。
有沒有辦法允許使用我的.jar的人將文件(例如MyLibraryConfigOverride.properties)放在我的.jar之外,然后將其拾取並使用? 我只希望他們覆蓋他們想要的特定屬性,而不是整個文件。 例如,更改服務器主機名但使用所有標准端口是很正常的。
謝謝你的幫助。
我想我不會嘗試覆蓋文件,而是對我的默認值進行了硬編碼,並提供了通過可選文件覆蓋這些默認值的可能性,例如:
Properties data = new Properties();
data.setProperty("a", "sensitive default");
InputStream in = getClass().getResourceAsStream("MyLibraryConfig.properties");
if (in != null) {
data.load(in);
in.close();
}
但是當然,如果願意,您也可以將默認值存儲在文件中。 在這種情況下,請使用其他名稱。 像這樣:
Properties data = new Properties();
InputStream defaults = getClass().getResourceAsStream("defaults.properties");
data.load(defaults);
defaults.close();
InputStream overwrites= getClass().getResourceAsStream("overwrites.properties");
if (overwrites!= null) {
data.load(overwrites);
overwrites.close();
}
這增加了額外的復雜性,您必須確定這是否能為您帶來收益。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.