向SBT子项目添加工件:引用未定义的设置



我有一个多模块的SBT项目,我想添加一个工件(由自定义任务生成)到子模块。但是我总是有一个Reference to undefined setting错误:

Reference to undefined setting: 
  documentation/*:adocPdf from documentation/*:packagedArtifacts ((sbt.BuildExtra) Defaults.scala:1966)

这是我的SBT 0.13.11的build.sbt:

import sbt.Keys._
import sbt.Project.projectToRef
import sbt._
lazy val commonSettings = Seq(
  scalaVersion := "2.11.8",
  [...]
)
lazy val adocPdf: TaskKey[File] = taskKey[File]("Generate documentation from Asciidoc")
adocPdf := {
  // generate pdf documentation to target/documentation-$version.pdf
  [...]
  file(s"${documentation.base.absolutePath}/target/documentation-${version.value}.pdf")
}
lazy val docPdfArtifact: Artifact = Artifact("documentation", "pdf", "pdf", None, Configurations.Docs :: Nil, None)
lazy val api = (project in file("api"))
    .settings(commonSettings: _*)
lazy val documentation = (project in file("documentation"))
    .settings(commonSettings: _*)
    .settings(addArtifact(docPdfArtifact, adocPdf).settings: _*)
lazy val myProject = (project in file("."))
    .settings(commonSettings: _*)
    .aggregate(api, documentation)

知道怎么了吗?

我不确定addArtifact在上面做什么,但是您需要将为adocPdf : TaskKey[File]定义任务主体时创建的设置分配给给定的项目:

lazy val adocPdf: TaskKey[File] = taskKey[File]("Generate documentation from Asciidoc")
lazy val adocPdfSetting = adocPdf := {
  //.. the task definition - return a `file`
}
lazy val documentation = (project in file("documentation"))
  //apply the setting to the project
  .settings(adocPdfSetting)

最新更新