簡體   English   中英

覆蓋.jar庫中包含的.properties文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM