正在为键设置新值/sbt内部版本中存在的设置



是否可以检查一个键是否存在,并且只在该键存在于构建中时为其定义一个新值?

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

需要的定义是:

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

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

在定义某个设置时,可以使用?查看该设置是否有以前的值。

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

您目前有两个选项:

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

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

  1. AutoPlugins-使用sbt 0.13.5 发布

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

    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插件,只为想要它的用户启用它。

最新更新