为键/设置设置新值(如果sbt构建中存在)?

为键/设置设置新值(如果sbt构建中存在)?,sbt,sbteclipse,Sbt,Sbteclipse,是否可以检查某个键是否存在,并且仅在生成中存在该键时为该键定义一个新值 用例是我们团队中的eclipse用户使用(作为本地插件安装),而非eclipse用户不安装插件。一旦我在构建脚本中定义了特定于sbteclipse的键,对于非eclipse用户,它就会中断 所需的定义是: EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Resource 此定义属于生成脚本(而不是由单个用户定义),因为生成类路径是生成

是否可以检查某个键是否存在,并且仅在生成中存在该键时为该键定义一个新值

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

所需的定义是:

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

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

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

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

您目前有两种选择:

  • 在项目本身上安装sbteclipse插件。只有Eclipse用户才会调用这些任务
  • 使用反射从类路径中抓取sbteclipse键并执行一些肮脏的魔法
  • sbt团队正在研究/提出两种解决方案:

  • 自动插销-使用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插件

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


  • 谢谢你的回答。我可能只是将sbteclipse添加到项目本身。sbt在这方面有更多的灵活性是很好的,但我知道sbt脚本或多或少是一个Scala程序,必须是类型安全的才能编译。如果没有更好的答案,我就把赏金给你。