gradle init //创建gradle工程,包括多种工程模板的快速创建以及从maven到gradle的转换
创建好的gradle工程结构如下所示
gradle/wrapper:gradle推荐的项目执行方式是使用wrapper,是一种帮助我们快速打包运行gradle项目的脚本,而且这不要求电脑上安装有gradle,因为wrapper.jar包含的代码会根据properties里的url去下载对应gradle的发行版本
如果项目没有自带wrapper,只需要在工程目录下键入 gradle wrapper即可添加wrapper,非常方便,但是要注意和原项目的gradle版本是不是一致,前去gradle-wrapper.properties核对
--gradle-version gradle版本号
--distribution-type gradle安装时候的类型,如bin或者all,默认是bin
--gradle-distribution-url 指定gradle发行包的url,如果指定这一项,则上面两项会被覆盖,也就是说不用自己指明了
如何启动wrapper来运行项目呢?---->gradlew/gradlew.bat bat用于windows下的运行 命令:gradlew.bat [参数]
运行bat脚本后wrapper会去下载对应版本,但是国内会报网络错误,可以将上面的url设置为本地的目录,也可以设置命令行下的代理(即使开了ssr也要设置命令行代理)
1.右键我的电脑->属性->高级->环境变量->系统变量。
2.新建参数名为HTTP_proxy。
3.路径名为http://yourproxy.com:yourport/
ok,继续回到gradle目录
build.gradle
根据注释,这是构筑项目的配置文件
settings.gradle
根据注释,这是用来组织项目的配置文件
创建一个任务
一个项目会有许多的任务,每个任务会执行一些基本的操作。例如:在build.gradle中加入以下文本
保存后回到命令行
task运行成功了。
运行 gradlew.bat tasks 显示所有该项目能执行的任务,properties能看到所有配置相关的信息,
第四行可以查询一个task的具体信息
加--scan参数可以在网页上在线查看这次任务执行过程的具体细节,包括帮你添加了哪些依赖包都能看到,要想工程每次都scan,在build.gradle里面加上
buildScan {
// always accept the terms of service
termsOfServiceUrl = 'https://gradle.com/terms-of-service'
termsOfServiceAgree = 'yes'
// always publish a build scan
publishAlways()
}
plugins:插件,其实就是一些支持,比如这里'java'就是对Java工程的支持,'application'就是支持你的工程作为一个应用,比如指定一个main.java文件作为启动项
Java应用
build项目:
如果你在 src/test目录下编写了Junit对src/main目录下的java文件进行测试,可以在build/test之后前往build/reports/tests/test/index.html查看测试的结果如何,或者scan项目,去web上查看
运行项目:
build完项目之后再检查一下tasks,会发现已经能run了
顺理成章run一下,告诉Gradle该去执行指定的java文件编译得到的class文件里的main函数了
Java Web应用
Gradle有两个插件帮助部署Web应用:
war:build Web项目
gretty:测试并部署web项目到tomcat/Jetty上
首先,gradle init没有提供默认的JavaWeb模板,那只能我们自己动手啦,先创建如下的项目目录
在根目录下添加build.gradle,添加war插件
providedCompile和provededRuntime:就是本地提供的jar,这类jar不会被加入到.wav文件中
war本身继承java,所以不需要声明java插件了
接下来添加一下wrapper
3.0以后的servlet都可以用注解来工作,所以web.xml可有可无-----即使你写了,也完全支持
接收name参数转发进response.jsp中,forward表示不回来这个servlet了,转发的页面返回的就是最后的输出。
href是超链接,意即Hello这个字符串链接向hello这个url,form是表单,action指向hello这个url,text就是给用户输入的文本框,name表示参数名字,submit是提交按钮。
接收user参数显示出来
https://plugins.gradle.org/这个网址查找插件现在的版本号
最后添加插件org.gretty,这个插件包含了在Jetty和Tomcat上测试和部署的足够组件来运行这个WebApplication,换言之,不用自己去搭建tomcat啦,这的确比自己在IDE里面搭建一个webApp要方便,尤其是在多人协作的环境下,可能不同人的tomcat版本不同,gradle就不用担心这种情况发生。当然不是每次都要下载,如果机器的缓存路径内已经有对应版本的插件或者依赖,gradle就会直接使用。
一阵猛地下载之后:
可以看到已经处在appRun的状态下了,因为是WebApp,一直在运行,要退出的要Ctrl+C即可。上方的信息显示了访问的url。
成功啦,Hello链接Link到doGet方法,下方的表单提供请求到doPost方法
最后的工程源代码目录结构是这样的:
Java Spring Boot:
先用init创建一个javaApp模板,配置build.gradle
/*
* This file was generated by the Gradle 'init' task.
*
* This generated file contains a sample Java project to get you started.
* For more details take a look at the Java Quickstart chapter in the Gradle
* User Manual available at https://docs.gradle.org/5.4.1/userguide/tutorial_java_projects.html
*/
plugins {
// Apply the java plugin to add support for Java
id 'java'
// Apply the application plugin to add support for building an application
id 'application'
id 'com.gradle.build-scan' version '2.3'
id 'org.springframework.boot' version '2.1.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.7.RELEASE'
}
repositories {
// Use jcenter for resolving your dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
}
dependencies {
// This dependency is found on compile classpath of this component and consumers.
//implementation 'com.google.guava:guava:27.0.1-jre'
// Use JUnit test framework
//testImplementation 'junit:junit:4.12'
implementation 'org.springframework.boot:spring-boot-dependencies:2.1.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' } }
}
}
}
}
}
// Define the main class for the application
mainClassName = 'gradle.spring.boot.project.App'
buildScan {
// always accept the terms of service
termsOfServiceUrl = 'https://gradle.com/terms-of-service'
termsOfServiceAgree = 'yes'
// always publish a build scan
publishAlways()
}
bootJar {
mainClassName = 'hello.App'
}
./gradlew bootRun命令报错:无法加载或找不到主类gradle.spring.boot.project.App 因为我移动了App.java的位置
正确的路径是 hello.App build.gradle里面路径没改导致找不到这个类
解决办法:
mainClassName = 'gradle.spring.boot.project.App'
->
mainClassName = 'hello.App'
现在有两个方法能够运行这个工程:
1.
./gradlew bootJar
java -jar build/libs/gradle-spring-boot-project.jar
2.
./gradlew bootRun
很神奇的是第一种运行方案并不会报上面说的错误而且能正常运行,但第二种运行方案就一定要路径正确才行了
其他的代码和工程目录结构:
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);
}
}
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!";
}
}
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!"));
}
}