Java学习之路 Gradle

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!"));
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值