【问题标题】:sbt plugin that customize other plugin自定义其他插件的 sbt 插件
【发布时间】:2017-02-10 11:17:22
【问题描述】:

我有许多共享共同行为的 sbt 项目,向 sbt 原生包添加自定义。

我尝试在自定义插件中推送所有常用实用程序功能和任务。 特别是我有一个自定义任务需要在通用打包程序全部压缩之前执行。

结构如下:

object MyPlugin extends AutoPlugin {

  // my custom task 
  val customTask = Def.task { ...}

  override def requires: Plugins = JavaAppPackaging

  object autoImport {
     addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.1")
  }

  import autoImport._


  override def projectSettings: Seq[Setting[_]] =
     Seq(
        packageZipTarball in Universal <<= (packageZipTarball in Universal) dependsOn customTask
     )

  }

插件编译得很好,但是当我将它导入到我的项目中时:

lazy val myProj: Project = (project in file("."))
   .settings(MyPlugin.projectSettings: _*)

然后我跑:

  sbt universal:packageZipTarball

我明白了:

 References to undefined settings: 

     universal:packageZipTarball from universal:packageZipTarball       

我需要做什么来修复它?

【问题讨论】:

    标签: sbt sbt-native-packager


    【解决方案1】:

    我猜你在错误的地方添加了插件。要将 sbt-native-packager 添加到您的 sbt-plugin 中,请执行以下操作

    build.sbt

    你需要在那里添加插件

    sbtPlugin := true
    addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.1")
    

    自动插件

    您现在可以在 AutoPlugin 中访问 native-packager。

    import com.typesafe.sbt.SbtNativePackager.Universal
    import com.typesafe.sbt.NativePackagerKeys.packageZipTarball
    
    object MyPlugin extends AutoPlugin {
       // ... your code
    }
    

    调试

    作为一般提示:调试未定义的设置和自动插件应始终从查看启用的自动插件开始。您可以通过调用sbt plugins 列出项目中启用的所有插件。

    希望对您有所帮助, 渚

    【讨论】:

    • 感谢 Muki,您为我指明了正确的方向:实际上,我还需要在使用我的自定义插件和通用插件的项目中导入 Native 打包器。添加。 enablePlugins(JavaAppPackaging) 修复了一切。谢谢!
    猜你喜欢
    • 2014-12-05
    • 1970-01-01
    • 2018-03-07
    • 2021-01-11
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2018-10-29
    • 2023-03-30
    相关资源
    最近更新 更多