我们很高兴地宣布,Buildship的2.0版本--我们对Eclipse的官方Gradle支持--现在已经可以通过Eclipse Marketplace获得。这个版本增加了对复合构建的支持,大大缩短了开发周转时间。基于1.x线期间大量的社区反馈,UI已经被重新设计了。项目同步现在更加准确,项目导入也少了一个步骤。我们增加了对Gradle离线模式的支持(感谢Rodrigue!),最后但并非最不重要的是,第三方集成商可以利用我们新的InvocationCustomizer 扩展点。请继续阅读关于这些新功能的每一个细节。
复合构建支持
什么是复合构建?
Gradle的复合构建功能允许你处理几个不同的Gradle构建,就像它们是一个大的多项目构建一样。当你需要在几个通常单独开发的项目上工作时,这极大地缩短了周转时间。
假设你写了一个Java库lib ,被你的许多应用程序使用。你发现了一个只在special-app 。传统的开发工作流程是修改lib 中的一些代码,并将快照安装到本地存储库。然后你将不得不改变special-app 的构建脚本,以使用新的快照,并检查该错误是否真的被修复。
然而,通过复合构建,你可以告诉Gradle将这两个项目视为一个。这将使special-app 直接依赖于lib 项目的输出。
你可以在这篇介绍性的博文中了解更多关于复合构建的信息。
IDE中的复合构建
如果你开发了special-app ,你可能已经在 Eclipse 中导入了它,并将lib 作为一个二进制依赖关系来引用。
在命令行中使用复合构建和在 Eclipse 中使用它们没有什么区别。要包含lib ,你只需要在你的settings.gradle 文件中添加一个条目,告诉Gradle应该从哪个文件夹中包含这个额外的构建。
includeBuild '../lib'
然后,要应用这些变化,请右击项目并选择Gradle > Refresh Project 。在同步完成后,你应该看到两件事:从包含的构建中的项目被导入,二进制依赖被替换成项目依赖。
现在,你可以在完整的IDE支持下对两个项目进行修改:错误标记、代码完成、重构等等。此外,如果你从Gradle Tasks 视图中执行Gradle测试或任何其他构建任务,执行时将考虑到来自所含构建的变化。
限制因素
当从IDE中使用复合构建时,你应该注意以下限制:
- 只有当导入的项目使用Gradle 3.3或更高版本时,复合构建支持才有效。
- 由于Gradle中的任务寻址限制,任务执行在包含的构建中被禁用。
- 不支持将WTP项目纳入一个复合体。
设计大调整
我们更新了 Buildship 用户界面,使其与当前的 Gradle 品牌以及 Eclipse 设计指南保持一致。图标现在可以被色盲人士区分开来,并且与Eclipse的暗色主题配合得很好。最后,高清晰度的图像已经到位,可以在高DPI显示器上使用。
简化导入向导
我们从导入和新项目向导中删除了JAVA_HOME、程序参数和JVM参数配置。用户仍然可以通过gradle.properties 文件来配置这些属性。
更准确的项目同步
在 Buildship 1.x 中,如果正在导入的项目有 Eclipse 描述符,则会显示一个对话框来确定是否应更新或删除这些描述符。这种行为很容易出错,而且会分散用户的注意力。
为了避免显示对话框,我们以如下方式改进了项目同步算法。如果项目使用的Gradle版本可以提供一个特定的属性(例如项目性质),它将被完全覆盖。只有当Gradle没有提供该属性的信息时,手动修改才会被保留。这使得旧版Gradle的用户可以绕过模型中缺失的信息,同时给新版Gradle的用户一个更一致的体验。
离线模式支持
用户现在可以通过工作区首选项将 Buildship 设置为离线工作。一旦启用,所有Gradle调用将收到一个额外的--offline 参数。
InvocationCustomizer 扩展点
InvocationCustomizer 扩展点使Eclipse插件能够为Gradle构建贡献额外参数。这允许集成商添加初始脚本或从IDE中控制项目属性。关于实施样本,请查看Buildship文档。
突破性变化
这个版本引入了以下突破性变化:
- 最低Java版本设置为1.7
- 最低Eclipse版本设置为4.2
- 对于直接位于Eclipse工作区位置下的项目,禁用项目重命名。
- 从Eclipse Mars直接迁移到Eclipse Oxygen的项目需要重新导入
- 在导入时不能再配置JAVA_HOME,请使用
gradle.properties。 - Java参数和Gradle属性不能再在导入时配置,请使用
gradle.properties。
安装
Buildship 2.0 可从Eclipse Marketplace或eclipse.org更新站点获得。请注意,更新网站的URL已经改变,因此这个版本没有自动更新。