我有一个多项目构建,我使用sbt汇编来创建胖罐子。我想创建两个jar:一个jar只包含项目创建的jar,另一个jar仅包含依赖项。我似乎能够很好地创建依赖项jar(assemblyPackageDependency),但我很难弄清楚如何使用创建一个jar,而只是项目生成的jar。有简单的方法吗?
sbt package
仅封装当前子项目- CCD_ 2仅包括依赖项。标记为
dependsOn
的项目不包括在内
assembly
、assemblyPackageDependency
或assemblyPackageScala
是利用AssemblyOption
中定义的设置来创建各种封装配置的任务。一些相关选项如下所示:
AssemblyOption(assemblyDirectory: File,
// include compiled class files from itself or subprojects
includeBin: Boolean = true,
includeScala: Boolean = true,
// include class files from external dependencies
includeDependency: Boolean = true,
使用如下所示配置的程序集调用的变体将导致具有所有子项目的二进制文件
assemblyOption in assemblyPackage := {
val ao = (assemblyOption in assembly).value
ao.copy(includeBin = true, includeScala = false, includeDependency = false)
},
但是,如果要保留assembly
,则可以创建一个新任务assemblyPackage
。来自主build.sbt
的代码段
lazy val assemblyPackage = TaskKey[File]("assemblyPackage", "packages multi-project using sbt-assembly")
lazy val assemblyPackageSettings = Seq(
// Required packaging configuartion
assemblyOption in assemblyPackageDependency := {
val ao = (assemblyOption in assemblyPackageDependency).value
ao.copy(includeScala = false)
},
// Some boiler-plate settings to be copied to new task
assembledMappings in assemblyPackage := Assembly.assembledMappingsTask(assemblyPackage).value,
assemblyPackage := Assembly.assemblyTask(assemblyPackage).value,
test in assemblyPackage := (test in assembly).value,
assembleArtifact in assemblyPackage := true,
packageOptions in assemblyPackage := (packageOptions in (Compile, packageBin)).value,
assemblyOutputPath in assemblyPackage := { (target in assembly).value / (assemblyJarName in assemblyPackage).value },
assemblyJarName in assemblyPackage := ((assemblyJarName in assemblyPackage) or (assemblyDefaultJarName in assemblyPackage)).value,
// Choice of jar name
assemblyDefaultJarName in assemblyPackage := { name.value + "-assemblyPackage-" + version.value + ".jar" },
assemblyOption in assemblyPackage := {
val ao = (assemblyOption in assembly).value
ao.copy(includeScala = false, includeDependency = false)
},
assemblyPackage := Assembly.assemblyTask(assemblyPackage).value
)
// And use itas
lazy val misc = project.settings(commonSettings ++ assemblyPackageSettings)
.dependsOn(common)
sbt assemblyPackage
将与所有相关子项目一起构建*-assemblyPackage-*jar
文件。