Gradle对Java项目进行依赖管理

Gradle是Java项目三大构建工具(Ant、Maven和Gradle)之一,通过它可以更加便捷地构建规范的Java项目和管理Java依赖。Gradle在Maven的基础上,通过Groovy的特定领域语言(DSL)来声明项目设置,避免了maven基于XML的各种繁琐配置。Gradle与Maven的关系可以用青出于蓝而胜于蓝来形容,Gradle沿用了Maven的GroupID、ArtifactID和Version组成Coordination唯一标识一个依赖项,并且将maven的scope简化为了compile、runtime、testCompile、testRuntime四种。此外Gradle沿用了maven的src目录结构,由source、resource、test source、test resource等相应文件夹构成。

安装Gradle

首先需要注意Gradle需要运行在Java 8或更高版本。

Gradle官网下载所需要的版本,只需要下载binary-only版本即可,然后将下载的文件解压到目标文件夹D:\Program\gradle-6.5\

将解压的目标文件夹添加到系统的环境变量Path中,右击我的电脑 -> 属性 -> 高级系统设置 -> 环境变量,在系统变量中找到Path,然后点击新建,将bin目录填入:D:\Program\gradle-6.5\bin

在命令行输入gradle -v显示Gradle版本为6.5

构建Java项目

在目标文件夹GradleDemo下执行命令 gradle init 初始化Java项目,出现如下提示,选择application、Java、构建语言为Groovy、测试框架JUnit4,然后输入项目名称和Java包名,这里都采用默认值GradleDemo

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 2

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Swift
Enter selection (default: Java) [1..5] 3

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4] 1

Project name (default: GradleDemo):

Source package (default: GradleDemo):

> Task :init
Get more help with your project: https://docs.gradle.org/6.5/userguide/tutorial_java_projects.html

BUILD SUCCESSFUL in 18s
2 actionable tasks: 2 executed

生成的项目目录结构如下,其中Gradle Wrapper是帮助解决项目依赖并构建项目的执行脚本,gradle使用Wrapper包装整个项目,使我们在不同环境下构建项目变得简单。

├── .gradle  													//  存放项目依赖等文件夹
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar  						// Gradle Wrapper的执行jar包
│       └── gradle-wrapper.properties  			//  Gradle Wrapper的配置属性
├── src															// Java项目的源代码目录
│   └── main													// 项目目录
│       ├── java  												// 项目java代码目录
│   			└── GradleDemo							// 项目包
│       └── resources  									//  资源目录
│   └── test													// 测试模块目录
│       ├── java  												
│   			└── GradleDemo							// 对应测试代码
│       └── resources  									//  测试资源目录
├── build.gradle    										// gradle构建命令脚本
├── gradlew  												// Gradle Wrapper的Unix执行脚本
├── gradlew.bat  											// Gradle Wrapper的Windows执行脚本 
└── settings.gradle 										// Gradle的配置文件

其中build.gradle文件是项目的依赖配置文件,其中plugins中添加gradle插件库。

repository定义Java依赖库,这里默认是为jcenter,我们在让其先查找本地的maven仓库mavenLocal(),然后去找自定义的国内阿里云仓库,最后再去中央仓库jcenter()。

dependencies中定义项目所需要的Java依赖。依赖前是其作用域关键字,如果在编译运行中都需要用到则使用compile(gradle3.0后被api所替代),如果仅在运行阶段需要则用runtime,仅在测试阶段需要则用testimplementation关键字与compile类似,但它引用的包对于其他module来说是不可见的。

plugins {
    id 'java'
    id 'application'
}

repositories {
	mavenLocal()
    maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }
    jcenter()
}

dependencies {
    api 'org.apache.commons:commons-math3:3.6.1' 		//提供给用户的api依赖接口,用户在编译时可见
    implementation 'com.google.guava:guava:29.0-jre'		//内部自己使用的依赖
    testImplementation 'junit:junit:4.13'									//测试时使用的依赖
}

application {
    mainClassName = 'GradleDemo.App'
}

执行task

Gradle提供了许多项目构建的脚本,在项目目录下命令行执行 ./gradlew tasks 会列出所有可执行的task任务。
我们可以在build.gradle文件内自定义要执行的操作。例如在其中定义copySrc操作将“src”文件夹复制到“dest”文件夹,其中group为task的分组信息,description为命令的描述,在上面的命令时显示这些信息

task copySrc(type: Copy, group: "Custom", description: "Copies sources to the dest directory") {
    from "src"
    into "dest"
}

然后在项目所在文件夹执行如下命令 ./gradlew copySrc 调用该task,执行完成后可以看到src已经被复制为dest文件夹了

gradle还提供了许多插件来完成其他操作,例如使用base插件中的Zip完成压缩操作,首先在plugins中引入该插件,然后定义zipSrc完成将src文件夹压缩为src-1.0.zip

plugins {	
	id 'base'
	......
}

task zip(type: Zip, group: "Custom" , description: "Archives sources in a zip file") {
    from "src"
    archiveFileName = "basic-demo-1.0.zip"
}

同样执行 ./gradlew zipSrc 命令就会在目录下生成/build/distributions/basic-demo-1.0.zip文件

编译运行

通过./gradlew build 命令可以编译项目,第一次运行编译时,gradle会检查本地缓存中是否有所需依赖,如果没有则从仓库下载依赖包,默认的本地缓存在C:\Users\Super.gradle\caches目录下。build会编译整个项目并且将结果输出到项目下的build/libs/GradleDemo.jar文件。此外build还会运行测试文件,并且生成测试报告 build/reports/tests/test/index.html 如下
在这里插入图片描述在gradle中使用gretty插件运行WebApp,gretty包含了许多web应用相关的task脚本,默认使用Jetty容器作为web项目的发布容器,相比于Tomacat,jettty是一个较为轻量级的servlet容器。

plugins {	
	id 'war'
	id 'org.gretty' version '3.0.3' 
}

执行./gradlew appRun,如下提示项目就会运行在http://localhost:8080/GradleDemo

> ./gradlew appRun                                                                  
11:03:06 WARN  Ignoring deprecated socket close linger time
11:03:12 INFO  Jetty 9.4.24.v20191120 started and listening on port 8080
11:03:12 INFO  GradleDemo runs at:
11:03:12 INFO    http://localhost:8080/GradleDemo

> Task :appRun
Press any key to stop the server.
<===========--> 87% EXECUTING [26s]
> :appRun

gradle提供了项目依赖的可视化页面,在项目文件夹输入命令 gradle build --scan 会进行构建扫描,并提供结果页面的网址

BUILD SUCCESSFUL in 1s
8 actionable tasks: 8 up-to-date

Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service. Do you accept these terms? [yes, no] yes

Gradle Terms of Service accepted.

Publishing build scan...
https://gradle.com/s/4p7baa6ja2orq

浏览器访问https://gradle.com/s/4p7baa6ja2orq可以看到如下所示页面,包含整个项目构建信息,第一次访问该网址会提示输入你的邮箱
在这里插入图片描述

IDEA中使用gradle

IDEA会默认将gradle依赖下载在C:\Users\Super.gradle目录下,我们可以手动设置其仓库位置,点击File | Settings | Build, Execution, Deployment | Build Tools | Gradle,修改 Gradle user home为目标位置即可。

在IDEA中新建项目 File -> New -> Project ,会弹出如下界面,选择Gradle、Java
在这里插入图片描述点击next 会提示填写项目的GroupId、ArtifactId、Version等信息,之后点击Finish,就会创建一个Gradle的Java项目并自动下载相关资源完成项目初始化
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值