我的项目使用 sbt-native-packager 和 packageArchetype.java_application 。 在 sbt阶段期间,我有一个任务生成一些最终的Typesafe样式配置文件,然后我将其复制到:
target/universal/stage/conf/application.conf
我想在bash脚本中将此目录添加到运行时类路径中,并且正在寻找最简单的方法。我讨厌维护一个单独的 src / main / templates / bash-template 这么简单的东西,而且我不知道如何去做其他事情。
谢谢!
答案 0 :(得分:10)
简答
定义包映射
mappings in Universal <+= (packageBin in Compile, sourceDirectory ) map {
(_, src) =>
// we are using the reference.conf as default application.conf
// the user can override settings here
val conf = src / "main" / "resources" / "reference.conf"
conf -> "conf/application.conf"
}
使用
在 src / universal / conf 中创建 jvmopts-Dconfig.file=/<installation-path>/conf/application.conf
添加到 build.sbt
bashScriptConfigLocation := Some("${app_home}/../conf/jvmopts")
server_archetype的示例: 关注example application。可以找到一些描述here。
答案很长
sbt-native-packager不直接支持更改类路径,因为它可能会导致类似
的问题与Typesafe Config类似,大多数使用配置文件的库都提供了一个参数来定义配置文件的位置。使用参数describe in the documentation。
您似乎正在尝试运行服务器,这意味着您可以使用
packageArchetype.java_server
旨在读取外部配置。看看example application如何使用它。
答案 1 :(得分:2)
您在标题中提出的问题与说明略有不同。我在这里回答标题中的问题 - 即如何将目录添加到类路径中:
这非常hacky和脆弱,因为如果/当sbt-native-packager更改脚本的生成方式时它可能会中断,但现在它对我有用:
private lazy val ClasspathPattern = "declare -r app_classpath=\"(.*)\"\n".r
bashScriptDefines := bashScriptDefines.value.map {
case ClasspathPattern(classpath) => "declare -r app_classpath=\"/path/to/some/external/lib/*:" + classpath + "\"\n"
case _@entry => entry
},
答案 2 :(得分:2)
以下设置:
scriptClasspath in bashScriptDefines ~= (cp => "../conf" +: cp),
允许您完全按照您的需要进行操作。
在这个具体示例中,我将“../conf”目录添加到类路径条目中。
此外,您需要将以下配置键导入构建SBT:
import com.typesafe.sbt.packager.Keys.bashScriptDefines
import com.typesafe.sbt.packager.Keys.scriptClasspath