多项目 sbt 插件中未定义设置的引用

Posted

技术标签:

【中文标题】多项目 sbt 插件中未定义设置的引用【英文标题】:Reference to undefined setting in plugin of multi-project sbt 【发布时间】:2016-09-20 07:11:34 【问题描述】:

我有以下项目定义(简化):

object B extends Build 
  lazy val root = (project in file("."))
    .aggregate(commons, processor)

  lazy val commons = (project in file("commons"))

  lazy val processor = (project in file("processor"))
    .enablePlugins(BuildInfoPlugin, BuildTag)

BuildTag 插件(也简化为手头的问题):

object BuildTag extends AutoPlugin 

  override def requires = BuildInfoPlugin

  override lazy val buildSettings = Seq(
    packageOptions in (Compile, packageBin) += 
      Package.ManifestAttributes(("buildinfo.package", (buildInfoPackage in Compile).value))
    
  )

当我加载项目时,我收到如下错误:

Reference to undefined setting: 

  ./compile:buildInfoPackage from ./compile:packageBin::packageOptions

看起来 sbt 试图引用插件使用范围之外的设置。为什么会这样?我该如何解决?

【问题讨论】:

【参考方案1】:

这里的问题不是多模块性质,因为它在单模块项目中也可以重现。

然而,而不是

override lazy val buildSettings = ...

您需要使用projectSettings 使buildInfoPackage 任务可用。

【讨论】:

以上是关于多项目 sbt 插件中未定义设置的引用的主要内容,如果未能解决你的问题,请参考以下文章

SBT插件——编译前执行自定义任务

未捕获的类型错误:无法调用 jquery jsonrpc 客户端中未定义的方法“设置”

同一文件中未定义的引用

对象 Amplify Schema 定义中未显示一对多关系

makefile 中未定义的引用

强制 GCC 通知共享库中未定义的引用