如何在project / {...}。scala中定义自定义sbt设置?

时间:2017-09-10 20:49:57

标签: scala sbt

使用 sbt 1.0.1 scala 2.12.3 ......

我的目录结构:

project/build.properties
project/PackageDist.scala
src/main/scala/{$packageDirs}/MyClass.scala
build.sbt

project / PackageDist.scala 中,我有:

import sbt._
import Keys._
import io.RichFile._

import java.io.File

object PackageDist {
  lazy val distArtifactRoot = settingKey[File]("The directory to which all distribution artifacts will be written")
  lazy val distDirectoryName = settingKey[String]("The name of the root diectory for the distribution")

  def distArtifactRootFile : Setting[File] = 
    distArtifactRoot := target.value / "dist"
  def distDirectory : Setting[String] =
    distDirectoryName := s"${normalizedName.value}-${version.value}"
}

build.sbt 中,我得到了:

lazy val commonSettings = Seq(
  organization := "myTestOrg",
  scalaVersion := "2.12.3",
  version := "0.1.0-SNAPSHOT"
)

lazy val root = ( project in file(".") )
  .settings(
    name := "package-test",
    commonSettings
  )

当我运行sbt时,distArtifactRoot运行时distDirectoryName> settings -V设置不可用。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您需要对其他sbt文件显示您的设置:

object PackageDist {
  lazy val distArtifactRoot = settingKey[File](
    "The directory to which all distribution artifacts will be written")
  lazy val distDirectoryName =
    settingKey[String]("The name of the root diectory for the distribution")

  val settings = Seq(
    distArtifactRoot := target.value / "dist",
    distDirectoryName := s"${normalizedName.value}-${version.value}"
  )
}

然后在任何项目中使用它们,如

lazy val root = ( project in file(".") )
  .settings(PackageDist.settings: _*) // <-- Add the settings to this project
  .settings(
    name := "package-test",
  )

重新加载sbt并输入dist +使自动完成功能显示您添加的2个设置。