gradle:现代高效的java构建工具( 二 )

  • testImplementation,这种依赖在测试编译时和运行时可见,类似于Maven的test作用域 。
  • testCompileOnly和testRuntimeOnly,这两种类似于compileOnly和runtimeOnly,但是作用于测试编译时和运行时 。
  • 通过简短精悍的依赖配置和多种多样的作用与选择,Gradle可以为我们提供比Maven更加优秀的依赖管理功能 。
    gradle的任务和插件gradle的配置文件是一个groovy脚本文件,在其中我们可以以编程方式自定义一些构建任务 。因为使用了编程方式,所以这带给了我们极大的灵活性和便捷性 。打个比方,现在有个需求,要在打包出jar的时候顺便看看jar文件的大小 。在gradle中仅需在构建脚本中编写几行代码即可 。而在Maven中则需要编写Maven插件,复杂程度完全不在一个水平 。
    当然,Maven发展到现在,已经存在了大量的插件,提供了各式各样的功能可以使用 。但是在灵活性方面还是无法和Gradle相比 。而且Gradle也有插件功能,现在发展也十分迅猛,存在了大量非常好用的插件,例如gretty插件 。gretty原来是社区插件,后来被官方吸收为官方插件,可以在Tomcat和jetty服务器上运行web项目,比Maven的相关插件功能都强大 。
    虽然gradle可以非常灵活的编写自定义脚本任务,但是其实一般情况下我们不需要编写构建脚本,利用现有的插件和任务即可完成相关功能 。在IDEA里,也可以轻松的查看当前gradle项目中有多少任务,基本任务如build、test等Maven和Gradle都是相通的 。
    gradle:现代高效的java构建工具

    文章插图
    gretty插件的任务
    配置镜像Maven官方仓库的下载速度非常慢,所以一般我们要配置国内的镜像源 。gradle在这方面和Maven完全兼容,因此只需稍微配置一下镜像源,即可使用Maven的镜像 。如果你用gradle构建过项目,应该就可以在用户目录的.gradle文件夹下看到gradle的相关配置和缓存 。
    之前wrapper下载的gradle也存放在该文件夹下,位置是wrapper/dists 。
    gradle:现代高效的java构建工具

    文章插图
    wrapper下载的gradle保存位置
    而依赖的本地缓存在cachesmodules-2files-2.1文件夹下 。目录结构和Maven的本地缓存类似,都是包名+版本号的方式,但是gradle的目录结构最后一层和Maven不同,这导致它们无法共用本地缓存 。
    gradle:现代高效的java构建工具

    文章插图
     
    言归正传,在gradle中配置下载镜像需要在.gradle文件夹中直接新建一个init.gradle初始化脚本,脚本文件内容如下 。这样一来,gradle下载镜像的时候就会使用这里配置的镜像源下载,速度会快很多 。再加上gradle wrapper在中国设置了CDN,现在使用gradle的速度应该会很快 。
    allprojects {repositories {maven {url "https://maven.aliyun.com/repository/public"}maven {url "https://maven.aliyun.com/repository/jcenter"}maven {url "https://maven.aliyun.com/repository/spring"}maven {url "https://maven.aliyun.com/repository/spring-plugin"}maven {url "https://maven.aliyun.com/repository/gradle-plugin"}maven {url "https://maven.aliyun.com/repository/google"}maven {url "https://maven.aliyun.com/repository/grails-core"}maven {url "https://maven.aliyun.com/repository/Apache-snapshots"}}}当然,如果你有代理的话,其实我推荐你直接为gradle设置全局代理 。因为gradle脚本实在是太灵活了,有些脚本中可能依赖了github或者其他地方的远程脚本 。这时候上面设置的下载镜像源就不管用了 。
    所以有条件还是干脆直接使用全局代理比较好 。设置方式很简单,在.gradle文件夹中新建gradle.properties文件,内容如下 。中间几行即是设置代理的配置项 。当然其他几行我也建议你设置一下,把gradle运行时的文件编码设置为UTF8,增加跨平台兼容性 。
    org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8systemProp.http.proxyHost=127.0.0.1systemProp.http.proxyPort=10800systemProp.https.proxyHost=127.0.0.1systemProp.https.proxyPort=10800systemProp.file.encoding=UTF-8org.gradle.warning.mode=all为什么使用gradle?看到这里,你应该对gradle有了基本的了解,也可以将其用于你的项目之中 。但是如果你Maven已经非常熟悉了,可能不太愿意使用gradle,因为貌似没有必要 。但是既然gradle出现了,就说明有很多人对Maven还是有一定的意见 。因此在这里我来总结一下gradle相比maven的优势 。
    首先第一点也就是最重要的一点就是速度 。gradle使用构建缓存、守护进程等方式提高编译速度 。结果就是gradle的编译速度要远超maven,平均编译速度比Maven快好几倍,而且项目越大,这个差距就越明显 。


    推荐阅读