简短版: 使用单独的sbt项目。
你可能已经注意到,JDKPackager
插件在各个平台上创建本地包。建立和测试主要工件的技巧是将其发布到工件服务器,然后为创建安装程序的单独项目。
如果您的项目每个平台只需要一个安装程序,则应该添加依赖项,设置mainClass
键,并添加enablePlugins(JDKPackagerPlugin)
:
enablePlugins(JDKPackagerPlugin)
name := "JDKPackagerPlugin Example"
version := "0.1.0"
organization := "com.foo.bar"
libraryDependencies += "com.foo.bar" %% "myProject" % "0.1.0"
mainClass in Compile := Some("com.foo.bar.ExampleApp")
jdkPackagerAssociations := Seq(
FileAssociation("foobar", "application/foobar", "Foobar file type"),
FileAssociation("barbaz", "application/barbaz", "Barbaz file type", jdkAppIcon.value)
)
如果您有这样的情况,需要每个平台多个安装程序(例如,命令行工具与 GUI),我通常会构建一个名为“packaging”的子目录,并使用独立的 build.xml
文件来聚合定义每个安装程序配置的单独子项目:
val baseSettings = Seq(
libraryDependencies += "com.foo.bar" %% "myProject" % "0.1.0"
)
lazy val packaging = project
.in(file("."))
.aggregate(a, b)
lazy val a = Project(id = "my-project-cli", base = file("my-project-cli"))
.settings(baseSettings: _*)
lazy val b = Project(id = "my-project-gui", base = file("my-project-gui"))
.settings(baseSettings: _*)
val packageSubs = taskKey[Seq[File]]("Build packages in subprojects")
(packageSubs in packaging) := {
Seq(
(packageBin.in(a, Universal)).value,
(packageBin.in(b, JDKPackager)).value
)
}
我发现将安装程序配置分解成这样有助于保持依赖关系和特定自定义的影响清晰易懂。