Scala jar读取外部属性文件

时间:2016-07-26 07:22:49

标签: java scala maven gradle jar

我编写了一些代码并将其导出为jar文件。在这个jar中有一个名为automation.properties的文件,其默认值是我使用

加载
val automationPropertiesFileURL = getClass.getResource("/automation.properties")  
  if (automationPropertiesFileURL != null) {
    val source = Source.fromURL(automationPropertiesFileURL)
    config = new Properties()
    config.load(source.bufferedReader())
  }

但是当这个jar文件作为gradle依赖项添加到C:\User\abc\.gradle并且我想从当前项目中读取automation.properties时,如何覆盖该位置并从中读取文件我的项目而不是jar文件本身?

3 个答案:

答案 0 :(得分:5)

类加载器将从首先找到的位置加载文件。

在您的情况下,该文件存在于两个地方:

  • 当前项目本身内部
  • jar依赖关系

类加载器将找到哪个文件, 取决于“当前项目”的顺序和类路径jar依赖性。 这就是你需要审查的内容, 这是加载正确文件的关键。

您当前的代码是正确的, 这是类路径配置的问题。

答案 1 :(得分:2)

我认为

Source.fromInputStream(
  getClass.getClassLoader.getResourceAsStream("/automation.properties")
)

应该有用。

API文档

Source#fromInputStream

Class#getClassLoader

ClassLoader#getResourceAsStream

答案 2 :(得分:2)

Java和SCALA一样,有不同的方法来读取属性文件,在我的一个答案中,我解释了从Jar内的属性文件和磁盘位置的属性文件中读取的区别。

在此处查看我的回答: Loading Properties from a JAR file (java 1.6)

这也适用于JAVA和SCALA! (注意,对于SCALA,你可以改变基本的sintax但是相同的概念)

希望它有所帮助!