在使用sbt-native-packager(0.7.x)的Play框架(2.3.x)Java项目中,如何创建.deb和.rpm包的客户特定变体?
使用通用设置创建二进制包(.deb,.zip)。一些客户根据其规格要求诸如守护程序用户名或日志位置之类的专业。我想保留通用软件包及其设置,并添加例如一个包含一些覆盖的新配置,以便我可以使用activator customer:packageBin
获取变体。
我到目前为止尝试的是创建一个新的SBT配置extend
sbt-native-packager的Debian
配置,因此我的有限理解应继承其设置和任务。然后,我希望能够设置,例如daemonUser in Customer := "custom"
,但以其他方式使用现有的Debian设置。
我的build.sbt
示例Play-Java项目(activator new
> play-java
):
import NativePackagerKeys._
name := """play-java"""
version := "1.0-SNAPSHOT"
lazy val Customer = config("customer") extend(Debian)
lazy val root = (project in file("."))
.enablePlugins(PlayJava)
.configs(Customer)
.settings( inConfig(Customer)(packagerSettings) : _*)
scalaVersion := "2.11.1"
libraryDependencies ++= Seq(
javaJdbc,
javaEbean,
cache,
javaWs
)
maintainer := "Me"
packageSummary := "Example project"
packageDescription in Debian := "Longer description"
daemonUser in Customer := "custom-user"
正如您所见,我现在可以设置,例如daemonUser in Customer
。在Play控制台中,我可以看到它已正确应用inspect customer:daemonUser
。我可以用activator customer:packageBin
创建一个.deb包。 但是包几乎是空的,不包含应用程序:
$ dpkg-deb -c target/play-java_1.0-SNAPSHOT_all.deb
drwxr-xr-x root/root 0 2014-10-06 22:08 ./
drwxr-xr-x root/root 0 2014-10-06 22:08 ./usr/
drwxr-xr-x root/root 0 2014-10-06 22:08 ./usr/share/
drwxr-xr-x root/root 0 2014-10-06 22:08 ./usr/share/play-java/
drwxr-xr-x root/root 0 2014-10-06 22:08 ./universal/
drwxr-xr-x root/root 0 2014-10-06 22:08 ./universal/tmp/
drwxr-xr-x root/root 0 2014-10-06 22:08 ./universal/tmp/bin/
-rw-r--r-- root/root 64 2014-10-06 22:08 ./universal/tmp/bin/debianprerm
-rw-r--r-- root/root 137 2014-10-06 22:08 ./universal/tmp/bin/debianpostinst
lrwxrwxrwx root/root 0 2014-10-06 22:08 ./usr/share/play-java/logs -> /var/log/play-java
每个客户的其他配置是可行的还是不按我想象的方式工作?
是否有不同的方式来实现我需要的东西,例如:与子项目?
答案 0 :(得分:1)
我用不同的方法解决了我的问题:
客户名称必须作为系统属性提供。在build.sbt
内部,无论客户需要特殊设置,我都会选择if-then-elses。
build.sbt:
val customer = sys.props.get("customer") getOrElse ""
daemonUser in Linux := {
customer match {
case "customerA" => "custom-user"
case _ => (daemonUser in Linux).value
}
}
然后使用activator -Dcustomer=customerA debian:package-bin
开始构建。
优点:
build.sbt
。 if-then-elses易于阅读,而且很明显发生了什么。缺点:
到目前为止,我很高兴,但如果有人提出更好的想法,我仍然希望听到它。