我在资源下有一个akka actors配置文件,
src/main/resources/remote_app.conf
src/main/scala/actors/Notification.scala
我正在加载以下资源,
1
val configFile = getClass.getClassLoader.getResource("remote_app.conf").getFile
val config_mediation = ConfigFactory.parseFile(new File(configFile))
actorSystem = ActorSystem("MediationActorSystem", config_mediation)
2
val path = getClass.getResource("/remote_app.conf").getFile
val config_mediation = ConfigFactory.parseFile(new File(path))
actorSystem = ActorSystem("MediationActorSystem", config_mediation)
当我从主程序执行并获取以下日志时,两者都工作正常,
[INFO] [11/21/2016 21:05:02.835] [主要] [Remoting] Remoting开始; 听地址 :[akka.tcp://MediationActorSystem@127.0.0.1:7070] [INFO] [11/21/2016 21:05:02.838] [主要] [Remoting] Remoting现在收听地址: [akka.tcp://MediationActorSystem@127.0.0.1:7070]
我正在使用sbt test创建一个jar:如下所示汇编并执行主类 SBT:
resourceDirectory in Compile := baseDirectory.value /"src/main/resources"
resourceDirectory in Test := baseDirectory.value /"src/main/resources"
java -cp <jar> <args>
从jar执行时无法加载配置文件。 我做错了什么。
答案 0 :(得分:1)
这是很多人遇到的热门程序。使用getResourceAsStream
这可以正常使用并在jar中使用。
getClass.getResourceAsStream("/remote_app.conf")
答案 1 :(得分:1)
来自pamu的回答是一个很好的提示,但对我来说并不完全有效。您仍然需要将其转换为InputStream
。
完整的解决方案是:
val is = getClass.getClassLoader.getResourceAsStream("remote_app.conf")
val source = scala.io.Source.fromInputStream(is).mkString
val config = ConfigFactory.parseString(source)
答案 2 :(得分:0)
最简单的方法可能是使用lightbend conf -library之类的东西: https://github.com/lightbend/config
默认情况下会从-resources文件夹中选择application.conf文件。
import com.typesafe.config.ConfigFactory
val conf = ConfigFactory.load()
您还可以将load -function其他文件名作为参数:
val conf = ConfigFactory.load("someother.conf")
注意:文件名前没有斜杠。