使用sbt-native-packager,我怎样才能简单地将目录添加到我的bash脚本的$ {app_classpath}?

blo*_*loo 4 bash scala config sbt sbt-native-packager

我的项目使用sbt-native-packagerpackageArchetype.java_application.在sbt阶段,我有一个生成一些最终的Typesafe样式配置文件的任务,然后我将其复制到:

target/universal/stage/conf/application.conf
Run Code Online (Sandbox Code Playgroud)

我想将此目录添加到bash脚本中的运行时类路径中,并且正在寻找最简单的方法.我讨厌维护一个单独的src/main/templates/bash-template用于这么简单的事情,而且我不知道如何去做.

谢谢!

Muk*_*uki 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"
}
Run Code Online (Sandbox Code Playgroud)

创建jvmoptsSRC /通用/ conf目录

-Dconfig.file=/<installation-path>/conf/application.conf
Run Code Online (Sandbox Code Playgroud)

添加到build.sbt

bashScriptConfigLocation := Some("${app_home}/../conf/jvmopts")
Run Code Online (Sandbox Code Playgroud)

server_archetype的示例:按照示例应用程序进行操作.这里可以找到一些描述.

答案很长

sbt-native-packager不直接支持更改类路径,因为它可能会导致类似问题

  • classpath排序
  • 安全问题

与Typesafe Config一样,大多数使用配置文件的库都提供了一个参数来定义配置文件的位置.使用文档中描述的参数.

看来你正在尝试运行服务器,这意味着你可以使用

packageArchetype.java_server
Run Code Online (Sandbox Code Playgroud)

它旨在读取外部配置.看一下示例应用程序如何使用它.

  • 而不是创建`src/universal/conf/jvmopts`,可以将以下代码添加到`build.sbt`:`bashScriptExtraDefines + ="""addJava"-Dconfig.file = $ {app_home} /../ conf/application .conf文件 "" ""` (5认同)

Roy*_*oyB 5

以下设置:

scriptClasspath in bashScriptDefines ~= (cp => "../conf" +: cp),
Run Code Online (Sandbox Code Playgroud)

允许您完全执行所需的操作。

在此特定示例中,我将“ ../conf”目录添加到类路径条目中。

另外,您需要将以下配置密钥导入到构建SBT:

import com.typesafe.sbt.packager.Keys.bashScriptDefines
import com.typesafe.sbt.packager.Keys.scriptClasspath
Run Code Online (Sandbox Code Playgroud)

  • 注意,可以仅在相对路径之前 (2认同)