我认为这会简单明了,尤其是在 Groovy 中,但我可以使用来自类路径上的 jar 文件中的 property 文件访问属性的帮助。我认为 Java 以及 Groovy 都支持它作为语言和运行时环境的基础部分。
我以为我已经接近这个了 -
String propPath = this.class.getClassLoader().getResource("conf/Config.properties").getPath()
println "propPath = '$propPath'"
Properties appProps = new Properties()
appProps.load(new FileInputStream(propPath))
String appVersion = appProps.getProperty("version")
println "appVersion = $appVersion"
但是 propPath 设置为 jar 文件的完整路径名(到目前为止一切顺利),但前面带有“file:”,并且它有一个感叹号,后跟资源名称 - /app/lib/util.jar!conf/Config.properties
,因此 FileInputStream 抛出 FileNotFoundException (如预期)。执行输出:
propPath = 'file:/app/lib/util.jar!/conf/Config.properties'
Exception thrown
java.io.FileNotFoundException: file:/app/lib/util.jar!/conf/Config.properties (No such file or directory)
如有任何帮助,我们将不胜感激。
getResource
的结果 (URL 已经是第一个警告信号)。它像常规一样开始
file://
URL,但其中有一个
!...
- 这是 JVM 告诉你, 您想要的文件就在这个存档中。
FileInputStream
只能真正从文件系统加载文件,因此 错误。最多
FileInputStream
可以读取
.jar
文件 你。所以你需要一种从“类路径”读取文件内容的方法 最短路线是向 请求
InputStream
类加载器并传递它来加载您的属性:
Properties appProps = new Properties().tap{
load(
Thread.currentThread().contextClassLoader.getResourceAsStream("conf/Config.properties")
)
}