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