如何从Java属性文件加载设置值?

Gil*_*lad 9 sbt

有没有办法从属性文件中动态加载设置值?

我的意思是,而不是硬编码 build.sbt

name := "helloWorld"
Run Code Online (Sandbox Code Playgroud)

有一些application.properties文件

name=helloWorld
Run Code Online (Sandbox Code Playgroud)

然后,在build.sbt文件中,有name := application.properties["name"] (最后一个例子纯粹是原理图,但我希望这个想法很明确)

Dan*_*ski 14

您可以创建一个设置键,其中包含从文件中读取的属性.

import java.util.Properties

val appProperties = settingKey[Properties]("The application properties")

appProperties := {
  val prop = new Properties()
  IO.load(prop, new File("application.properties"))
  prop
}

name := appProperties.value.getProperty("name")
Run Code Online (Sandbox Code Playgroud)


Jac*_*ski 8

在@ daniel-olszewski的答案中作弊.

project/build.sbt声明对Typesafe配置的依赖性:

libraryDependencies += "com.typesafe" % "config" % "1.2.1"
Run Code Online (Sandbox Code Playgroud)

build.sbt使用Typesafe配置和设置设置的加载属性中:

import com.typesafe.config.{ConfigFactory, Config}

lazy val appProperties = settingKey[Config]("The application properties")

appProperties := {
  ConfigFactory.load()
}

name := {
  try {
    appProperties.value.getString("name")
  } catch {
    case _: Exception => "<empty>"
  }
}
Run Code Online (Sandbox Code Playgroud)

您也可以定义一个def可以从属性中设置值的方法.