Eclipse & Gradle
还是从那句老话开始, “工欲善其事,必先利其器”。要想熟练地完成一件事,有个好的工具往往能事半功倍。
但是很多时候,迷信教条最终会成了造轮子而造轮子的递归循环;选择合适的工具,并掌握它,解决好问题才是正确的方向。
这里简单说说,我选择Eclispe和Gradle的原因。
Gradle (Gradle VS Maven or Ant); 选择gradle的原因很简单,简单而清晰的语法,强大的脚本语言,快速而稳定的构建。
Eclipse (主要对比Idea, VS Code)
- 开源及活跃而广受欢迎的社区
- 相对于Idea来说,个人使用经验上来看,在大Project上使用(源码多,项目多)更稳定, 且有偏向支持开源社区的因素,故使用Eclipse;VS Code对于小的Project来说还好,功能比Eclipse弱,查看多个文件及源码也不是很方便,大项目会使系统卡顿,但是小项目一般可以使用gradle + vim。
开发环境
当前开发环境
- Ubuntu 19.10 x86_64
- Gradle 5.6.4
- Eclipse (Snap版本)
Eclipse Platform
Version: 2019-03 (4.11)
Build id: I20190307-0500
OS: Linux, v.5.3.0-24-generic, x86_64 / gtk 3.24.12
Java version: 1.8.0_171
Eclipse项目配置及依赖管理
我的Java项目管理方案
我不喜欢将IDE文件提交到git代码仓库,在我看来,IDE的作用就是一个文本编辑器,而且从协作角度来看,不同的开发者可能会选择不同的编辑器,所以不需要将IDE文件提交。 而Gradle脚本,不仅作为项目开发中一款重要的工具,而且包含了很多项目配置信息,因此需要提交到git仓库(有时候,如果开发人员和CI使用了统一的或兼容的gradle版本,甚至gradle wrapper都不需要提交)
- 生成项目配置
默认Gradle eclipse编译输出目录为bin, 但是gradle构建输出目录为build, 因此需要改配置。
plugins {
id 'java'
id 'eclipse'
}
eclipse {
project.natures 'org.eclipse.buildship.core.gradleprojectnature'
classpath {
downloadJavadoc = true
downloadSources = true
defaultOutputDir = file('build/default')
file.whenMerged {
entries.each {
source ->
// This seems kludgy. If the second test is omitted, it fails processing a 'Project Dependency' entry
if (source.kind == 'src' && source.hasProperty('output')) {
def outputPath = source.output
switch(source.path) {
case 'src/main/java':
source.output = 'build/classes/java/main'
break
case 'src/main/resources':
source.output = 'build/resources/main'
break
case 'src/test/java':
source.output = 'build/classes/java/test'
break
case 'src/test/resources':
source.output = 'build/resources/test'
break
}
}
}
}
}
}
Gradle BuildShip插件
- UT
命令方式
gradle test --tests a.b.c.d.ClassA.methodX
IDE方式

测试结果可以通过下图方式查看,具体错误信息点击show failure就可以看到。

- Debug
命令方式, 需要远程debug。使用--debug-jvm命令监听socket端口,默认5005, 然后使用Eclipse attach上就可以了。
gradle test --debug-jvm --tests a.b.c.d.ClassA.methodX
或者直接用IDE Debug As –> Gradle Test就可以了
刷新依赖
gradle eclipse --refresh-dependencies
解决IDEA 无法刷新snapshot依赖
configurations.all {
resolutionStrategy.cacheDynamicVersionsFor 10, 'minutes'
resolutionStrategy.cacheChangingModulesFor 10, 'minutes'
}
自动刷新
因为SringBoot的“hotreload”方案并不是真正的热部署(动态类加载机制),所以这里就称它为自动刷新。
这里主要需要改动的是,将eclipse默认输出目录bin改为build, 对应于gradle java插件默认构建输出目录。参考上面配置,然后勾选Project -> Build automatically 就可以了。
对于代码量比较大,但是机器性能不佳的情况,请酌情考虑,否则太卡影响开发工作。
掌握必要的快捷键
熟悉常用快捷键能迅速提高开发效率,不用键盘和鼠标切来切去,影响敲代码。而且当Eclipse很卡时,快捷键相比鼠标移动能降低资源消耗。 参考 https://github.com/artificerpi/devbox/blob/master/ide/eclipse.md