sbt-assembly不会选择特定于配置的设置

时间:2016-01-27 20:48:46

标签: scala sbt sbt-assembly

我正在从工具sbt更新一个旧的0.7.x构建文件,幸好删除了对#34;简单"的引用。在此期间,从它的名字开始。

曾经有效的东西,不再这样做了。我有针对平台特定组装任务的不同config条目。其中包括由于某种原因现在称为assemblyExcludedJars而不是excludedJars的特定过滤器,以及由于某种原因现在称为assemblyJarName而不是jarName的特定jar名称。

基本上:

val Foo = config("foo") extend Compile

lazy val assemblyFoo = TaskKey[File]("assembly-foo")

lazy val root = Project(id = "root", base = file("."))
  // .configs(Foo)  // needed? doesn't change anything
  .settings(
    inConfig(Foo)(inTask(assembly) {
      assemblyJarName := "wtf.jar"
    }),
    scalaVersion := "2.11.7",
    assemblyFoo <<= assembly in Foo
  )

现在我希望如果我运行sbt assembly-foosbt foo:assembly,它会产生一个文件wtf.jar。但我得到了默认root-assembly-0.1-snapshot.jar。 assemblyExcludedJars时会发生同样的问题,它们会被忽略并仍然包含在内。

如果我删除inConfig,则可以使用

lazy val root = Project(id = "root", base = file("."))
  .settings(
    inTask(assembly) {
      assemblyJarName := "wtf.jar"
    },
    scalaVersion := "2.11.7",
    assemblyFoo <<= assembly in Foo
  )

但是现在我不能为不同的配置使用不同的jar名称(这是重点)。

正如in a blog post by one of sbt's authors and the author of sbt-assembly所述,这应该有效。它也写在this Stackoverflow question中。但是这个例子需要一个古老版本的sbt-assembly(2013年的0.9.0,自动插件之前等)并且似乎并不适用于当前版本。

1 个答案:

答案 0 :(得分:0)

如果定义了新配置,则必须重新定义(?)将要使用的所有任务。显然,对于sbt-assembly,这意味着运行baseAssemblySettings

val Foo = config("foo") extend Compile

lazy val assemblyFoo = TaskKey[File]("assembly-foo")

lazy val root = Project(id = "root", base = file("."))
  .settings(
    inConfig(Foo)(baseAssemblySettings /* !!! */ ++ inTask(assembly) {
      jarName := "wtf.jar"
    }),
    scalaVersion := "2.11.7",
    assemblyFoo  := (assembly in Foo).value
  )

使用sbt 0.13.9和sbt-assembly 0.14.1进行测试。