Eclipse & Gradle

还是从那句老话开始, “工欲善其事,必先利其器”。要想熟练地完成一件事,有个好的工具往往能事半功倍。

但是很多时候,迷信教条最终会成了造轮子而造轮子的递归循环;选择合适的工具,并掌握它,解决好问题才是正确的方向。

这里简单说说,我选择Eclispe和Gradle的原因。

开发环境

当前开发环境

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
                        }
                    }
            }
        }
    }
}

https://github.com/gradle/gradle/issues/3839

Gradle BuildShip插件

命令方式

gradle test --tests a.b.c.d.ClassA.methodX

IDE方式

Run as Gradle tests

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

测试结果

命令方式, 需要远程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