2

是否可以检查一个键是否存在,如果它存在于构建中,则只为该键定义一个新值?

用例是我们团队的eclipse用户使用sbteclipse(作为本地插件安装),非eclipse用户不安装插件。一旦我在构建脚本中定义了特定于 sbteclipse 的键,它就会对非 Eclipse 用户中断。

需要的定义是:

EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Resource

此定义属于构建脚本(而不是由单个用户定义),因为构建类路径是构建/项目的属性。

4

1 回答 1

2

?在定义该设置时,您可以使用它来查看该设置是否存在先前的值。

这里真正的问题是您需要来自 Eclipse 插件的类型,这意味着如果它不在类路径中,则根本无法引用该.createSrc键,因为 Scala 会在插件的任何导入时阻塞。

您目前有两种选择:

  1. 在项目本身上安装 sbteclipse 插件。只有 Eclipse 用户会调用这些任务。
  2. 使用反射从类路径中获取 sbteclipse 键并做一些肮脏的魔法。

sbt 团队正在研究/提出两种解决方案来解决这个问题:

  1. AutoPlugins - 使用 sbt 0.13.5 发布

    使用 AutoPlugins,您可以指定一组自动包含的其他插件的设置和依赖项。为 AutoPlugins 更新 sbteclipse 插件后,您将能够执行以下操作:

    object MyCompanyPlugin extends AutoPlugin {
      override def requires: Plugins = EclipsePlugin
      override def trigger = allRequirements
      override def projectSettings = Seq(
        EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Resource
      )
    }
    

    然后,让您的 Eclipse 用户依赖这个“公司”插件,它会自动“增强”现有的 sbteclipse 插件并使用您想要的设置。

  2. 有一个关于“构建级别”概念的提议,您可以选择启用/禁用 .sbt 文件的编译/加载,例如,您可以删除 sbteclipse 插件并只为需要它的用户启用它。

于 2014-05-01T15:23:25.180 回答