SBT 使用 sbt-native-packager 如何创建不同的构建文件?
Posted
技术标签:
【中文标题】SBT 使用 sbt-native-packager 如何创建不同的构建文件?【英文标题】:SBT using sbt-native-packager how to create different build files? 【发布时间】:2015-09-01 12:13:34 【问题描述】:我有一个 Play 2.3 应用程序,按照 docs 我可以构建一个 debian 包,当我想构建这样的东西时问题就来了:
我对@987654324@ 有不同的配置,我想构建 4 个不同的包,一个包含代码,另一个包含配置。所以我会得到这4个包:
app-version.deb [this contains the code]
app-config-dev-version.deb [this contains the dev configuration]
app-config-qa-version.deb [this contains the qa configuration]
app-config-prod-version.deb [this contains the prod configuration]
但是对于安装 app-version.deb,我需要其他一个作为依赖项,具体取决于机器。
machine-dev: app-version.deb and app-config-dev-version.deb
machine-qa: app-version.deb and app-config-qa-version.deb
and so on ...
【问题讨论】:
通常使用 debian 打包,您需要使用一组参考配置安装您的包,并使用 ansible 或 puppet 等工具来管理特定环境。 【参考方案1】:根据我的经验,为您的应用程序配置额外的 debian 软件包并不是一个好主意。对于 play 应用程序,您还有其他更容易创建和维护的选项。
使用多个 .conf 文件
Play 使用Typesafe Config Library。为每个环境创建一个配置文件,例如
conf/
reference.conf # contains default settings
dev.conf
qa.conf
prod.conf
现在如何定义哪一个被打包?好吧,有几个选择。
全部打包,启动时选择
全部打包并在启动时选择要使用的:
./bin/your-app -Dconfig.resource=conf/prod.conf
如果您可以控制事情的开始方式,这很简单并且有效。
全部打包并选择打包时间
您可以在构建期间通过javaOptions in Universal
添加启动命令。您可以使用Command Alias 或custom task 来做到这一点
复制并重命名特定配置
基本上你选择(例如上面的自定义任务)
配置包含为application.conf
。
mappings in Universal +=
val conf = (resourceDirectory in Compile).value / "reference.conf"
conf -> "conf/application.conf"
我不建议这样做,因为您目前不知道自己使用的是哪个软件包。
更新
使用子模块
配置/范围更复杂,有时会以意想不到的方式表现。简单的替代方法是使用子模块。
your-app/
app
conf
..
dev/
qa/
prod/
您的 build.sbt
将包含类似这样的内容
lazy val app = project
.in(file("your-app"))
.enabledPlugins(PlayScala)
.settings(
// your settings
)
lazy val dev = project
.in(file("dev"))
// this one is tricky.
// Maybe it works when using the PlayScala Plugin
.enabledPlugins(PlayScala)
.settings(
// if you only use the JavaServerAppPackaging plugin
// you will need to specifiy a mainclass
//mainClass in Compile := Some("")
)
// ... rest the same way
最后你使用dev/debian:packageBin
进行开发。
【讨论】:
感谢您的解释,问题是我不想与软件包共享配置文件。我需要如何做到这一点。你能告诉我怎么做吗?所以在你的最后一个目的中,我要构建三个包 dev、prod、qa,每个包都只有一个配置文件?以上是关于SBT 使用 sbt-native-packager 如何创建不同的构建文件?的主要内容,如果未能解决你的问题,请参考以下文章
在“sbt-native-packager”脚本中使用除“sbt run”之外的其他 sbt 命令。例如:“sbt flywayMigrate”
如何使用 sbt-native-packager 设置 Docker Registry
扩展 sbt-native-packager (Docker)