Groovy - 如何从类路径上的 jar 中的属性文件读取属性

问题描述 投票:0回答:1

我认为这会简单明了,尤其是在 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)
如有任何帮助,我们将不胜感激。

java groovy properties-file
1个回答
0
投票
仔细看看URL,这是

getResource

的结果
(URL 已经是第一个警告信号)。它像常规一样开始
file://
 URL,但其中有一个 
!...
 - 这是 JVM 告诉你,
您想要的文件就在这个存档中。

FileInputStream

 只能真正从文件系统加载文件,因此
错误。最多 
FileInputStream
 可以读取 
.jar
 文件
你。

所以你需要一种从“类路径”读取文件内容的方法 最短路线是向 请求

InputStream

类加载器并传递它来加载您的属性:

Properties appProps = new Properties().tap{ load( Thread.currentThread().contextClassLoader.getResourceAsStream("conf/Config.properties") ) }
    
© www.soinside.com 2019 - 2024. All rights reserved.