Scala Typesafe配置加载错误的配置

Scala Typesafe配置加载错误的配置,scala,typesafe-config,Scala,Typesafe Config,所以问题很简单,我希望解决办法也会很简单 所以基本上我有两个配置文件application.conf和dev.conf。我从命令行中传递配置文件,如下所示sbt-Dconfig.file=dev.conf 问题是当我从主对象(扩展App的对象)使用ConfigFactory.load时,它会加载我通过命令行传递的配置(在本例中是dev.conf),但当我从不同的对象加载配置时,它会加载默认的application.conf 我可以加载从任何对象的参数传递的配置吗?当您使用runMainSBT任务

所以问题很简单,我希望解决办法也会很简单

所以基本上我有两个配置文件
application.conf
dev.conf
。我从命令行中传递配置文件,如下所示
sbt-Dconfig.file=dev.conf

问题是当我从主对象(扩展App的对象)使用
ConfigFactory.load
时,它会加载我通过命令行传递的配置(在本例中是
dev.conf
),但当我从不同的对象加载配置时,它会加载默认的
application.conf


我可以加载从任何对象的参数传递的配置吗?

当您使用
runMain
SBT任务运行应用程序时,SBT将不会为您的代码创建单独的JVM。这会对应用程序生命周期产生一些影响,当然也会对系统属性产生影响

通常,只要您的构建配置不启用,您的方法就应该有效。但是,我认为更好的方法是实际依赖分叉并显式指定系统属性。这是保证工作。为此,您需要将
run
任务中的
fork
设置设置为
true
,然后添加一个JVM命令行选项:

Compile / run / fork := true,
Compile / run / javaOptions += "-Dconfig.file=dev.conf",

之后别忘了重新启动SBT。使用这种方法,您不需要将
config.file
属性传递给SBT;相反,它由
javaOptions
设置控制,如上例所示。

当您使用
runMain
SBT任务运行应用程序时,SBT不会为您的代码创建单独的JVM。这会对应用程序生命周期产生一些影响,当然也会对系统属性产生影响

通常,只要您的构建配置不启用,您的方法就应该有效。但是,我认为更好的方法是实际依赖分叉并显式指定系统属性。这是保证工作。为此,您需要将
run
任务中的
fork
设置设置为
true
,然后添加一个JVM命令行选项:

Compile / run / fork := true,
Compile / run / javaOptions += "-Dconfig.file=dev.conf",

之后别忘了重新启动SBT。使用这种方法,您不需要将
config.file
属性传递给SBT;相反,它由
javaOptions
设置控制,如上例所示。

不清楚在这两种情况下如何运行应用程序。您可能知道,无论表面上如何操作,它都归结为启动JVM的.SomeClass调用的
java-cp类路径。只要
config.file
系统属性设置为
dev.conf
,通常通过
java
二进制文件(
java-Dconfig.file=dev.conf
)的命令行参数,调用
ConfigFactory.load()
的位置并不重要,因为系统属性在整个应用程序中都是相同的,因为它是全局状态的一部分。我的意思是,将系统属性正确地传递给应用程序非常重要,因为这是它可以在一个主类中工作而在另一个主类中失败的唯一原因。在这两种情况下,我都运行application
sbt-Dconfig.file=“dev.conf“
,然后在sbt内部我使用
runMain…
不清楚在这两种情况下如何运行应用程序。您可能知道,无论表面上如何操作,它都归结为启动JVM的.SomeClass调用的
java-cp类路径。只要
config.file
系统属性设置为
dev.conf
,通常通过
java
二进制文件(
java-Dconfig.file=dev.conf
)的命令行参数,调用
ConfigFactory.load()
的位置并不重要,因为系统属性在整个应用程序中都是相同的,因为它是全局状态的一部分。我的意思是,将系统属性正确地传递给应用程序非常重要,因为这是它可以在一个主类中工作而在另一个主类中失败的唯一原因。在这两种情况下,我都运行application
sbt-Dconfig.file=“dev.conf”
,然后在sbt内部使用
runMain…