使用sbt native packager,我如何简单地在bash脚本';s${app_classpath}?
我的项目使用sbt原生打包机和packageArchetype.java_应用程序。 在sbt阶段,我有一个任务生成一些最终的Typesafe样式配置文件,然后复制到:使用sbt native packager,我如何简单地在bash脚本';s${app_classpath}?,bash,scala,sbt,config,sbt-native-packager,Bash,Scala,Sbt,Config,Sbt Native Packager,我的项目使用sbt原生打包机和packageArchetype.java_应用程序。 在sbt阶段,我有一个任务生成一些最终的Typesafe样式配置文件,然后复制到: target/universal/stage/conf/application.conf 我想在bash脚本中将这个目录预先添加到运行时类路径中,并正在寻找最简单的方法。我不想为这么简单的东西维护一个单独的src/main/templates/bash模板,我也不知道该怎么做 谢谢 简短回答 定义包映射 mappings in
target/universal/stage/conf/application.conf
我想在bash脚本中将这个目录预先添加到运行时类路径中,并正在寻找最简单的方法。我不想为这么简单的东西维护一个单独的src/main/templates/bash模板,我也不知道该怎么做
谢谢 简短回答 定义包映射
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"
}
服务器_原型的示例:
遵循规则。可以找到一些描述
长答案
sbt本机打包程序不直接支持更改类路径,因为它可能导致以下问题:
- 类路径排序
- 安全问题
packageArchetype.java_server
其设计用于读取外部配置。看看如何使用它。您在标题中提出的问题与描述有点不同。我在这里回答标题中的问题,即如何将目录预先添加到类路径中: 这是非常粗糙和脆弱的,因为如果/当sbt本机打包程序更改脚本的生成方式时,它可能会中断,但目前它对我有效:
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
},
以下设置:
scriptClasspath in bashScriptDefines ~= (cp => "../conf" +: cp),
允许您准确地执行您需要的操作
在这个特定的示例中,我将“./conf”目录添加到类路径条目之前
此外,您还需要将以下配置密钥导入构建SBT:
import com.typesafe.sbt.packager.Keys.bashScriptDefines
import com.typesafe.sbt.packager.Keys.scriptClasspath
除了创建
src/universal/conf/jvmopts
之外,还可以将以下代码添加到build.sbt
:bashscriptextraldefines+=“addJava”-Dconfig.file=${app_home}/./conf/application.conf”“
要使生成的bat文件在windows上工作,还可以将以下代码添加到build.sbt
batScriptExtraDefines+=“调用:添加java”-Dconfig.file=%APP\u HOME%\conf\application.conf”“
N.B.可以仅在SBT 1.2中预先设置相对路径。我只需要一次导入:import nativePackageHelper.\u
这就是我需要做的。在过去的五年中,是否出现了更好的方法?
scriptClasspath in bashScriptDefines ~= (cp => "../conf" +: cp),
import com.typesafe.sbt.packager.Keys.bashScriptDefines
import com.typesafe.sbt.packager.Keys.scriptClasspath