是否可以检查一个键是否存在,并且只在该键存在于构建中时为其定义一个新值?
用例是,我们团队中的eclipse用户使用sbteclipse(作为本地插件安装),而非eclipse用户不安装该插件。一旦我在构建脚本中定义了sbteclipse特定的键,它就会为非eclipse用户中断。
需要的定义是:
EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Resource
此定义属于构建脚本(而不是由单个用户定义),因为构建类路径是构建/项目的属性。
在定义某个设置时,可以使用?
查看该设置是否有以前的值。
这里真正的问题是,你需要Eclipse插件中的类型,这意味着如果它不在类路径上,你就根本不能引用.createSrc
键,因为Scala会阻碍插件的任何导入。
您目前有两个选项:
- 在项目本身上安装sbteclipse插件。只有Eclipse用户才会调用这些任务
- 使用反射从类路径中获取sbteclipse键,并执行一些肮脏的魔术
sbt团队正在研究/提出两种解决方案来解决这个问题:
-
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插件。
-
有一个关于"构建级别"概念的建议,在这个概念中,您可以选择性地启用/禁用.sbt文件的编译/加载,这样您就可以删除sbteclipse插件,只为想要它的用户启用它。