Gradle是趋势,极简入门Gradle编译
最近由于工作的原因,从github上查看了一下Spring 5.0、ElasticSearch、Kafka的源码,不经意间发现它们的编译都是采用gradle而不是maven,gradle更是Android工程的默认编译方式。虽然项目的编译在项目的开发中只占据一小部分,但是很多程序员却经常抱怨,大部分时间都花去搞环境了,代码还没来得及写。而环境问题往往就是jar包的依赖冲突,某个类或者方法找不到等。基于现在Gradle的流行趋势,所以了解Gradle十分必要。本文用一个简单的列子,带你入门Gradle编译。
maven工程的编译常用的也就是这三点:1,如何配置maven仓库;2,如何加入依赖;3,用集成开发工具如何编译。Gradle和maven类似,常用的也就是这三个功能。下面就以Spring boot的gradle工程为例说明。
maven工程在pom.xml文件中进行依赖的管理,而gradle工程则在build.gradle中进行依赖的管理。如下是spring boot添加了Spring web、Mybaits、Junit的依赖的build.gradle的文件。
buildscript {
ext {//ext 相当于maven中的properties属性,其以key-value的形式定义属性 springBootVersion = '2.1.2.RELEASE' }
repositories { mavenCentral() }
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java' // 导入java 插件,Java plugin是Gradle核心API的一部分,Java plugin插件提供了一系列的任务支持构建、编译、测试Java项目。
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.example' //目标jar包坐标
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8' //编译使用的jdk版本
repositories {mavenCentral()}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
上面的代码片段中,对repositories声明了两次?为什么要申明两次,buildscript代码块中的声明与下半部分声明有什么不同?
其实答案非常简单。buildscript中的声明是gradle脚本自身需要使用的资源。可以声明的资源包括依赖项、第三方插件、maven仓库地址等。而在build.gradle文件中直接声明的依赖项、仓库地址等信息是项目自身需要的资源。
mavenCentral()则表示从中央仓库获取相关依赖,如果要使用国内镜像,如阿里云。只需要将mavenCentral()改为 maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }即可。
另外从build.gradle中看到dependencies 有classpath和implementation两种方式,其区别在于classpath(),一般是添加 buildscript 本身需要运行的东西。而implementation则是工程需要依赖的第三方jar文件等。所以如果要应用一个新的jar包,只需要在maven仓库中找到jar对应的坐标,然后以implementation 的方式添加到dependencies {}即可。
最后将工程打包成jar包,只需要在intellig idea中选择Gradle assemble任务进行构建既可以在工程工作目录下获取编译好的jar包。如下图所示:
![](https://img.haomeiwen.com/i6295401/dc67876da1fe1156.png)