如何在scala sbt

时间:2016-11-21 15:47:49

标签: scala sbt properties-file akka-actor

我在资源下有一个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执行时无法加载配置文件。 我做错了什么。

3 个答案:

答案 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")

注意:文件名前没有斜杠。