如何在使用它的项目的多项目构建中开发 sbt 插件?

2024-01-09

是否可以在多项目设置中构建 sbt 插件,并在同一多项目的其他子项目中使用该插件?

例如:

root/
+  mySbtPlugin/
+  myProject/
   +  project/
      +  plugins.sbt    // Uses `mySbtPlugin`

It is not可能的,因为为单个或多模块项目定义插件的唯一方法是通过project(元)构建。当我使用您描述的布局设置沙箱环境时,我再次被欺骗为您提供解决方案。

sbt 允许project(元)项目仅位于根目录中。没有其他project目录被处理并成为构建定义的一部分。

这就是为什么你最好的(也是唯一的)选择是构建多模块myProject and mySbtPlugin为了简化您的开发,并仅为您真正想要的这些项目启用插件(请小心自动插件 http://typesafe.com/blog/preview-of-upcoming-sbt-10-features-read-about-the-new-plugins, 尽管)。

项目/plugins.sbt

lazy val root = (project in file(".")) dependsOn sbtNonamePlugin

lazy val sbtNonamePlugin = ProjectRef(file("../sbt-noname"), "sbt-noname")

addSbtPlugin("pl.japila" % "sbt-noname" % "1.0")

构建.sbt

lazy val `my-project`, `sbt-noname` = project

sbt-noname/build.sbt

sbtPlugin := true

name := "sbt-noname"

organization := "pl.japila"

version := "1.0"

sbt-noname/src/main/scala/sbtnoname/Plugin.scala

package sbtnoname

import sbt._
import plugins._

object Plugin extends AutoPlugin {

  override def trigger = allRequirements

  override val projectSettings: Seq[Setting[_]] = inConfig(Test)(baseNonameSettings)

  lazy val sayHello = taskKey[Unit]("Say hello")

  lazy val baseNonameSettings: Seq[sbt.Def.Setting[_]] = Seq(
    sayHello := {
      println("I'm the plugin to say hello")
    }
  )
}

有了上面的文件,运行sbt.

> about
[info] This is sbt 0.13.6-SNAPSHOT
[info] The current project is {file:/Users/jacek/sandbox/multi-plugin/}my-project 0.1-SNAPSHOT
[info] The current project is built against Scala 2.10.4
[info] Available Plugins: sbt.plugins.IvyPlugin, sbt.plugins.JvmPlugin, sbt.plugins.CorePlugin, sbt.plugins.JUnitXmlReportPlugin, sbtnoname.Plugin, com.timushev.sbt.updates.UpdatesPlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.4
> projects
[info] In file:/Users/jacek/sandbox/multi-plugin/
[info]   * multi-plugin
[info]     my-project
[info]     sbt-noname
> plugins
In file:/Users/jacek/sandbox/multi-plugin/
    sbt.plugins.IvyPlugin: enabled in multi-plugin, sbt-noname, my-project
    sbt.plugins.JvmPlugin: enabled in multi-plugin, sbt-noname, my-project
    sbt.plugins.CorePlugin: enabled in multi-plugin, sbt-noname, my-project
    sbt.plugins.JUnitXmlReportPlugin: enabled in multi-plugin, sbt-noname, my-project
    sbtnoname.Plugin: enabled in multi-plugin, sbt-noname, my-project
> my-project/test:sayHello
I'm the plugin to say hello
[success] Total time: 0 s, completed Jun 15, 2014 3:49:50 PM
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在使用它的项目的多项目构建中开发 sbt 插件? 的相关文章

随机推荐

  • 如何借用字段进行序列化但在反序列化时创建它?

    我有一个这样的结构 derive Serialize Deserialize struct Thing pub small header Header pub big body Body 我想把这个连载Thing通过网络发送 我已经有一个B
  • 在 Eclipse 文本编辑器中,如何将段落重新格式化/填充/对齐为 80 个字符宽?

    在 Eclipse 中编辑文本文件 例如 README 文件 时 我还没有找到一种方法让编辑器重新格式化文本段落 以便它们适合合理的宽度 通常为 80 个字符 这看起来应该是一件很平常想做的事情 但是我还没有找到 有人可以帮忙吗 请注意 我
  • Android - 两个设备之间的通信

    安装在两台设备上的 Android 应用程序相互通信的最佳方式是什么 设备可以直接连接而不使用短信吗 根据您的要求和设置 您有多种选择 如果您的设备彼此距离非常近 最多约 10 米 您可以按照 Derek 的建议使用蓝牙进行通信 如果您的设
  • jQuery - 等待函数返回值

    我有一个 jquery 函数 用于使用 ajax 请求发送电子邮件 function sendMail from to subject message var datastr from from to to subject subject
  • Java 中 PKCS#5 PBKDF1 的算法名称是什么?

    我在使用密码学方面有几个问题 我正在使用 AES 问题一 我正在尝试使用SecretKeyFactory班级在 我正在尝试获取与 PBKDF1 PKCS 5 相关的实例 我是密码学新手 我在网上尝试过 但找不到任何此类算法 确实支持 我想要
  • 脚本文件与命令行:rsync 和 --exclude

    我有一个简单的测试 bash 脚本 如下所示 bin bash cmd rsync rv exclude dir new cmd execute command 当我运行脚本时 它还会复制以 尽管我本想排除他们 当我直接从命令行运行相同的
  • 如何通过滑动动画以编程方式在 FlipView 中导航

    Windows 开发中心声明UseTouchAnimationsForAllNavigation财产 XAML FlipView 控件支持三种导航模式 基于触摸 基于按钮和程序化 当用户通过触摸导航时 FlipView 项目会平滑地滚动到视
  • sql注入场景中格式化函数与参数?

    我知道 sql 语句中参数的使用 但出于好奇 使用 Format 函数来防止 sql 注入而不是使用参数是安全的 像这个样本 sCustomer string begin AdoSql CommandText Format Select S
  • 故障排除“运行时编译器未加载”

    使用以下命令构建 Angular2 应用程序后 出现以下运行时错误 prod flag 运行时编译器未加载 据我了解 生产版本使用 AoT 并且在此场景中不支持运行时编译 我的问题是 我不知道我正在做的任何事情都需要运行时编译器 它甚至可能
  • 连接空间数据时如何解决球面几何故障

    我有一个形状文件 带有多个多边形 和一个带有坐标的数据框 我想将数据框中的每个坐标分配给形状文件中的多边形 因此 要在数据框中添加具有多边形名称或 ID 的列 这里是链接到数据 https docs google com spreadshe
  • 如何读取程序加载解决方案一部分的文件?

    我正在编写一个 C WinForms 应用程序 该应用程序的组件之一是 SQLite 数据库 如果用户第一次运行该程序 该程序应该在用户的主目录中创建必要的文件夹和文件 即数据库文件 效果很好 不过 还需要建立数据库 即需要添加表 我有一个
  • 不确定的 NSProgressIndicator 将不会动画

    所以我有一个简单的用户界面 一个 开始 按钮 一些文本 标签和一个进度栏 单击 开始 按钮时 NSProgressIndicatorshould动画 这是我的代码 synthesize progressBar progressBar Som
  • Turtle 模块 - 保存图像

    我想弄清楚如何在使用 python 的海龟模块创建绘图后保存位图或矢量图形图像 经过一番谷歌搜索后 我找不到简单的答案 我确实找到了一个名为画布2svg http wm ite pl proj canvas2svg index html 但
  • 为什么 Array.IndexOf 不像 List 那样检查 IEquatable ?

    考虑this https dotnetfiddle net RVgvG0 code public static void Main var item new Item Id 1 IList list new List
  • BeautifulSoup 找不到正确解析的元素

    我在用BeautifulSoup解析一堆可能非常脏的HTML文件 我偶然发现了一件非常奇怪的事情 HTML 来自这个页面 http www wvdnr gov http www wvdnr gov 它包含多个错误 例如多个
  • Angular 通用 + 外部 API

    我知道 Angular Universal 仍在开发中 因此 我考虑过将 Angular Universal 用于一个 Web 应用程序 该应用程序定期从外部 API 服务器提取数据 大约每 10 秒通过 Http 服务提取一次 然后 该数
  • 为什么 UIWebView 中的 Google 搜索结果没有触发 webViewDidFinishLoad?

    毫无疑问 这是一个关于网页的更普遍的问题 但通过 Google 内容很容易证明这一点 在 Google 主页上输入某些搜索条件时 结果不会触发webViewDidFinishLoad方法 当彩色 Google 徽标被链接到功能页面的某些艺术
  • 如何处理“一旦你的元素不再连接就可以调用connectedCallback”编码Web组件

    我的问题中粘贴的那句话是从https developer mozilla org en US docs Web Web Components Using custom elements Using the lifecycle callbac
  • 张量流 - 了解卷积的张量形状

    目前正在努力通过我的方式卷积网络的 Tensorflow MNIST 教程 https www tensorflow org get started mnist pros first convolutional layer我需要一些帮助来理
  • 如何在使用它的项目的多项目构建中开发 sbt 插件?

    是否可以在多项目设置中构建 sbt 插件 并在同一多项目的其他子项目中使用该插件 例如 root mySbtPlugin myProject project plugins sbt Uses mySbtPlugin It is not可能的