Gradle 认识
Gradle是什么?
(1)Gradle是一种自动化构建工具,可以帮你更好的管理项目中的差异,依赖,编译,打包,部署.....,可以自己定义满足自己需要的构建逻辑,写入到build.gradle 中供日后使用
(2)Gradle不是一种编程语言,不能帮助你实现软件中任何实际的功能
Building Spring Boot 2 Applications with Gradle
准备
JDK1.8 以上
Gradle 4.6 以上
初始化 Gradle Project
$ mkdir ~/gradle-spring-boot-project
$ cd ~/gradle-spring-boot-project
$ gradle init --type java-application
会出现以下结构:
gradle-spring-boot-project
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ └── java
│ └── App.java
└── test
└── java
└── AppTest.java
build.gradle 文件 中配置Spring Boot 的依赖
plugins {
id 'java'
id 'org.springframework.boot' version '2.0.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.7.RELEASE'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-dependencies:2.0.5.RELEASE'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
components {
withModule('org.springframework:spring-beans') {
allVariants {
withDependencyConstraints {
// Need to patch constraints because snakeyaml is an optional dependency
it.findAll { it.name == 'snakeyaml' }.each { it.version { strictly '1.19' } }
}
}
}
}
}
创建一个简单项目 Hello Gradle
在文件夹src/main/java/hello 创建两个类
App.java
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
HelloGradleController.java
package hello;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController("/")
public class HelloGradleController {
@GetMapping
public String helloGradle() {
return "Hello Gradle!";
}
}
在 src/test/java/hello 创建AppTest.java
package hello;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
@AutoConfigureMockMvc
public class AppTest {
@Autowired
private MockMvc mvc;
@Test
public void helloGradle() throws Exception {
mvc.perform(get("/"))
.andExpect(status().isOk())
.andExpect(content().string("Hello Gradle!"));
}
}
在build.gradle 文件中声明主类
bootJar {
mainClassName = 'hello.App'
}
最后运行,直接上输入命令
./gradlew bootRun
Gradle VS Maven
简洁
Gradle抛弃了Maven的基于XML的繁琐配置,众所周知XML的阅读体验比较差,对于机器来说虽然容易识别,但毕竟是由人去维护的。取而代之的是Gradle采用了领域特定语言Groovy的配置,大大简化了构建代码的行数。
eg.
作者:EZLippi
链接:https://www.zhihu.com/question/29338218/answer/51293828
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
<properties>
<kaptcha.version>2.3</kaptcha.version>
</properties>
<dependencies>
<dependency>
<groupId>com.google.code.kaptcha</groupId>
<artifactId>kaptcha</artifactId>
<version>${kaptcha.version}</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
dependencies {
compile('org.springframework:spring-core:2.5.6')
compile('org.springframework:spring-beans:2.5.6')
compile('org.springframework:spring-context:2.5.6')
compile('com.google.code.kaptcha:kaptcha:2.3:jdk15')
testCompile('junit:junit:4.7')
}
灵活
各种在Maven中难以下手的事情,在Gradle就是小菜一碟,比如修改现有的构建生命周期,几行配置就完成了,同样的事情,在Maven中你必须编写一个插件,那对于一个刚入门的用户来说,没个一两天几乎是不可能完成的任务
小结
通俗的说 Gradle是打包用的。
为啥需要打包? 方便他人使用或者发布到服务器上
为啥用 Ant? 打包需要做很多事,比如配置文件中的用户名或密码,本地开发和程序实际运行肯定不一致。每次打包要做重复的事,Ant可以用xml的形式写成脚本,然后自动运行。
为啥用Maven? 可以自动打包,而且还可以下载jar包
为啥用Gradle? 又能自动打包,又可以下载jar包,打包逻辑还灵活。
参考文章
如何通俗地理解Gradle
Gradle教程和指南
Building Spring Boot 2 Applications with Gradle
Gradle VS Maven