需要从我在我的 sbt 插件中使用的插件中提供一个 SettingKey

Posted

技术标签:

【中文标题】需要从我在我的 sbt 插件中使用的插件中提供一个 SettingKey【英文标题】:Need to provide a SettingKey from a plugin I use in my sbt plugin 【发布时间】:2019-07-01 05:10:52 【问题描述】:

我正在使用s3 resolver plugin,并希望在我的AutoPlugin 中覆盖它。

我已尝试将值添加到 projectSettingsglobalSettings

错误

not found: value s3CredentialsProvider
[error]     s3CredentialsProvider := s3CredentialsProviderChain

代码

lazy val s3CredentialsProviderChain = bucket: String =>
    new AWSCredentialsProviderChain(
      new EnvironmentVariableCredentialsProvider(),
      CustomProvider.create(bucket)
    )
  

 override lazy val projectSettings = Seq(
publishTo := 
   if (Keys.isSnapshot.value) 
      Some("my-snapshots" at "s3://rest-of-stuff")
     else 
      Some("my-releases" at "s3://rest-of-stuff")
    
  ,
  s3CredentialsProvider := s3CredentialsProviderChain
)

我正在处理的插件代码没有定义它自己的任何自定义设置,因此它没有自己的autoImport

更新

我一直无法解析MyPlugin 中的fm.sbt.S3ResolverPlugin,代码无法编译。

我已经尝试将它添加到 MyPlugin 的 build.sbt 上的 enablePlugins 以及像这样将它添加到 dependencies

libraryDependencies ++= Seq(
  "com.amazonaws" % "aws-java-sdk-sts" % amazonSDKVersion,
  "com.frugalmechanic" % "fm-sbt-s3-resolver" % "0.17.0"
)

我从 sbt 收到一个错误,我在下面询问过:

sbt fails to resolve a plugin as dependency

【问题讨论】:

【参考方案1】:

如果您在 project 目录中创建 AutoPlugin。您需要将此添加到plugins.sbt

addSbtPlugin("com.frugalmechanic" % "fm-sbt-s3-resolver" % "0.16.0")

如果你创建一个独立的插件,把这个添加到插件的build.sbt

sbtPlugin := true
addSbtPlugin("com.frugalmechanic" % "fm-sbt-s3-resolver" % "0.16.0")

autoImport 不适用于为sbt 编译的scala 文件,例如插件。您已像在简单的 scala 程序中一样指定 imports 语句。像这样的

import fm.sbt.S3ResolverPlugin
import sbt._

object TestPlugin extends AutoPlugin 

  override def requires = S3ResolverPlugin

  override def trigger = allRequirements

  override def projectSettings: Seq[Def.Setting[_]] = Seq(
    S3ResolverPlugin.autoImport.s3CredentialsProvider := ???
  )

请注意,要启用TestPlugin,您必须在build.sbt 中调用enablePlugins(S3ResolverPlugin)

【讨论】:

我遇到了一些问题,即 sbt 无法将插件正确解析为依赖项。我已经更新了同样的问题。 我曾尝试使用enablePlugins 作为替代方案,但它也不起作用。

以上是关于需要从我在我的 sbt 插件中使用的插件中提供一个 SettingKey的主要内容,如果未能解决你的问题,请参考以下文章

如何在我自己的项目中使用分叉的 SBT 插件

覆盖 SBT 插件中的映射

在哪里可以找到下载的 sbt 插件?

sbt插件 - 如何确保我的settingKey在其他一切之前解决?

SBT 插件可以嵌入来自另一个插件的任务吗?

在 Android Studio 插件列表中找不到 sbt