安装
需要有Java环境
下载地址:https://gradle.org/releases/
8.5版本仅有二进制文件:https://gradle.org/next-steps/?version=8.5&format=bin
8.5版本包含文档和源码及二进制文件:https://gradle.org/next-steps/?version=8.5&format=all
Linux安装
官网文档:https://docs.gradle.org/8.5/userguide/installation.html#ex-installing-manuall
# 新建目录
mkdir /opt/gradle
# 将压缩包上传到该目录下,在压缩文件目录下,执行接所以命令
# 将文件解压缩到/opt/gradle目录下
unzip -d /opt/gradle gradle-8.5-bin.zip# 查看文件
ls /opt/gradle/gradle-8.5
LICENSE NOTICE bin getting-started.html init.d lib media# 配置环境变量,即上面文件解压的路径到bin目录
export PATH=$PATH:/opt/gradle/gradle-8.5/bin
Windows安装
新建一个gradle安装目录:G:\environment\gradle;
双击打开下载的压缩包,将打开的里面的gradle-*.*文件拖拽复制到G:\environment\gradle目录中;
配置环境变量
Gradle Wrapper
# 在Gradle项目中生成或更新Gradle Wrapper,用于下载和运行特定 Gradle 版本的脚本文件
./gradlew wrapper --gradle-version=8.5 --distribution-type=bin./gradlew wrapper --gradle-version=6.6.1 --distribution-type=bin# 配置gradle之后,可以不用安装gradle也能构建项目
./gradlew tasks Downloading https://services.gradle.org/distributions/gradle-6.6.1-bin.zip./gradlew tasks Downloading http://192.168.27.20:8081/repository/gradle-distribution/gradle-6.6.1-bin.zip
3种使用的方式:
- 新建Gradle项目,添加一个Gradle Wrapper;
- 使用现有的Gradle Wrapper运行项目;
- 通过升级Gradle Wrapper来达到升级Gradle版本的效果
1.添加Gradle Wrapper
新建的项目,如果没有Gradle Wrapper,可以通过gradle wrapper给当前项目添加Gradle Wrapper(需要安装Gradle)。可以将这个生成的文件添加到git版本控制上面,就能实现Gradle构建版本一致。
gradle/wrapper/gradle-wrapper.properties文件存储相关信息
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
#distributionUrl=file:///D:/environment/zip/gradle-8.5-bin.zip 指定本地文件地址
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists--gradle-distribution-url=https://services.gradle.org/distributions/gradle-7.6-bin.zip
可以通过参数控制Gradle Wrapper生成的情况:
- –gradle-version:控制版本,可选项:latest、release-candidate、nightly、release-nightly、具体版本;
- –distribution-type:gradle版本类型:bin-压缩版、all,默认bin;
- –gradle-distribution-url:可以指定远程的gradle的下载地址及版本,会将properties文件中的值替换,这个会让上面两个参数失效;
- –gradle-distribution-sha256-sum:用于验证下载的Gradle发行版的SHA256哈希和;
- –network-timeout:下载Gradle发行版本的超时时间,单位ms,默认10000;
- –no-validate-url:禁用对配置的分发URL的验证,URL的有效性校验;
- –validate-url:启用对配置的分发URL的验证,默认开启;
the URL is validated by sending a HEAD request in the case of the https scheme or by checking the existence of the file in the case of the file scheme.
文件的作用:
- gradle-wrapper.jar:包含了下载Gradle发行版的代码。
- gradle-wrapper.properties:Wrapper运行时的配置文件,控制gradle下载的版本及地址,本机的位置等;更多的配置如:配置代理,需要去不同的配置文件。官网文档:https://docs.gradle.org/8.5/userguide/build_environment.html#sec:gradle_configuration_properties
- gradlew、gradlew.bat:用于使用Gradle Wrapper执行构建的linux或Windows脚本。有配置Gradle Wrapper的情况下,不需要安装Gradle环境。
# 生成当前gradle版本的Gradle Wrapper
gradle wrapper# 执行失败,可能是构建过程下载文件超时
gradle wrapper --gradle-distribution-url=https://services.gradle.org/distributions/gradle-7.6-bin.zip# 换成本地下载的文件,就可以
gradle wrapper --gradle-distribution-url=file:///G:/environment/gradle-7.6-all.zip# 生成默认版本的Gradle Wrapper
gradle wrapper
2.使用Gradle Wrapper
使用Wrapper方式构建是值得推荐的,这个能确保构建的过程可靠的、可控的、标准的。使用Wrapper构建看起来就像使用安装的Gradle构建一样。可以根据操作系统来选中gradlew或gradlew.bat而不是gradle命令。
如果在系统上没有安装可用的gradle版本,Wrapper将会根据gradle-wrapper.properties的配置去下载文件,将其存储在本地。只要配置文件中的distributionUrl没有发送改变,后续的构建调用就会复用之前下载的gradle版本。
3.升级Gradle Wrapper
方式:
- 修改gradle-wrapper.properties中的distributionUrl的版本;
- 通过执行gradle wrapper指定具体的版本(如果gradle-wrapper.jar有优化也能获取到);
# 将Gradle Wrapper升级到最新版本(没有安装Gradle也能通过这个命令升级)
./gradlew.bat wrapper --gradle-version latest# 将Gradle Wrapper升级到指定版本
./gradlew.bat wrapper --gradle-version 8.5# 查看Gradle的版本,根据Gradle Wrapper版本来的
./gradlew.bat --version
通过这个./gradlew.bat会面临没有代理导致gradle的jar包无法下载的问题,配置代理之后也会出现Gradle Wrapper构建失败的(猜测会不会是多次构建,下载,ip被屏蔽),经过测试发起确实如此
可以通过给自动下载的gradle配置代理,实现下载依赖,gradlew-*.*/init.d/目录下新建init.gradle内容如下:
// 全局的Maven仓库
allprojects{repositories {mavenLocal()maven { url 'https://maven.aliyun.com/repository/public/' }maven { url 'https://maven.aliyun.com/repository/jcenter/' }maven { url 'https://maven.aliyun.com/repository/google/' }// gradle下载仓库maven { url 'https://maven.aliyun.com/repository/gradle-plugin/' }maven { url 'https://jitpack.io/' }}
}
settingsEvaluated { settings ->settings.pluginManagement {// 清除了默认的插件仓库配置repositories.clear()repositories {mavenLocal()// 可以多个地址maven {url 'https://maven.aliyun.com/repository/gradle-plugin/'}}}
}
下载被屏蔽测试
通过将配置文件换成gradle仓库,发现会提示要换成https协议,通过allowInsecureProtocol = true可以解决;插件找不到,将下面换的地址换成aliyun的gradle插件地址,发现就能下载了。
协议不支持报错
找不到id: ‘org.springframework.boot’, version: '3.1.7’这个插件
最终配置
构建成功
4.自定义Gradle Wrapper
https://docs.gradle.org/8.5/dsl/org.gradle.api.tasks.wrapper.Wrapper.html
buidl.gradle文件指定配置的Gralde Wrapper的版本类型,这样就不用在构建时通过参数指定
tasks.named('wrapper') {distributionType = Wrapper.DistributionType.ALL
}
下载认证
Gradle Wrapper可以使用Http基本身份验证从服务器下载Gradle压缩包。可以在私人的Gradle仓库设置身份认证。有两个方式进行认证:
- 作为系统配置gradle.properties,放在特定的位置;
- 在distributionUrl路径中配置身份验证
官网提示:HTTP 基本身份验证只能与 HTTPS URL 一起使用,而不能与普通 HTTP URL 一起使用。使用基本身份验证时,用户凭据以明文形式发送。
gradle.propertis
gradle.properties相关文档:https://docs.gradle.org/8.5/userguide/build_environment.html#sec:gradle_configuration_properties
systemProp.gradle.wrapperUser=username
systemProp.gradle.wrapperPassword=password
distributionUrl
distributionUrl=https://username:password@somehost/path/to/gradle-distribution.zip
Gradle Wrapper代理
官网文档:https://docs.gradle.org/8.5/userguide/networking.html#sec:accessing_the_web_via_a_proxy
SHA-256校验
可以通过命令参数或者wrapper.properties的方式配置Hash和校验
distributionSha256Sum=371cb9fbebbe9880d147f59bab36d61eee122854ef8c9ee1ecf12b82368bcf10
命令行参数:–gradle-distribution-sha256-sum
5.校验Gradle的完整性
手动校验Hash和
# linux
cd gradle/wrappercurl --location --output gradle-wrapper.jar.sha256 https://services.gradle.org/distributions/gradle-{gradleVersion}-wrapper.jar.sha256echo "gradle-wrapper.jar" >> gradle-wrapper.jar.sha256sha256sum --check gradle-wrapper.jar.sha256# mac
cd gradle/wrappercurl --location --output gradle-wrapper.jar.sha256 https://services.gradle.org/distributions/gradle-{gradleVersion}-wrapper.jar.sha256echo "gradle-wrapper.jar" >> gradle-wrapper.jar.sha256shasum --check gradle-wrapper.jar.sha256# Windows
expected = Invoke-RestMethod -Uri https://services.gradle.org/distributions/gradle-8.5-wrapper.jar.sha256actual = (Get-FileHash gradle\wrapper\gradle-wrapper.jar -Algorithm SHA256).Hash.ToLower()@{$true = 'OK: Checksum match'; $false = "ERROR: Checksum mismatch!`nExpected: $expected`nActual: $actual"}[$actual -eq $expected]
获取hash和
# linux
sha256sum gradle/wrapper/gradle-wrapper.jar# mac
shasum --algorithm=256 gradle/wrapper/gradle-wrapper.jar# Windows
(Get-FileHash gradle\wrapper\gradle-wrapper.jar -Algorithm SHA256).Hash.ToLower()
6.首次下载gradle wrapper失败解决方式
当前项目指定的gradle-wrapper版本是7.2,首次就没有把gradle7.2版本下载成功,这个时候如果要通过./gradlew.bat wrapper升级gradle版本,首先会去下载gradle7.2版本。
# 会在当前项目下生成一个gradle wrapper当前gradle版本的
gradle wrappergradle wrapper --gradle-version 7.2
# 尝试下载,发现在当前gradle下配置的仓库代理没有生效
./gradlew wrapper --gradle-version=7.2
要解决下载超时问题,可以通过让下载走代理来解决:在gradle-wrapper.properties中配置了代理
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=33210
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=33210
发现在gradle-wrapper.proper添加了上面的配置文件之后,还是提示下载连接超时,通过jps查询这个下载启动JVM进程id,使用jinfo -sysprops <vimid>发现System的properties中没有代理这些属性(不知道是不是构建工具设置未选择配置)。
通过配置环境变量的方式加入这个系统参数,发现还是不能下载,此时配置已经加载到JVM进程中了。
不能下载的原因是没有配置https的代理,因为下载的地址是https。
_JAVA_OPTIONS-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=33210 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=33210
也可以手动先下载文件,在配置下载地址指向本地才能解决
distributionUrl=file:///D:/environment/zip/gradle/gradle-7.2-bin.zip
JitPack
https://jitpack.io/
是一个基于 Git 的 Maven 仓库服务,它的作用是允许开发者将他们的 GitHub 项目转换为 Maven 仓库中的依赖。这为那些没有将其项目发布到 Maven 中央仓库或其他公共 Maven 仓库的开发者提供了一个简便的方式分享和使用他们的库。
假设有一个名为 “MyLibrary” 的 Java 库,该库托管在 GitHub 上,GitHub 地址为https://github.com/username/MyLibrary
。此库有一个标签为 “v1.0.0” 的发布版本。
如果开发者想在他们的项目中使用 “MyLibrary” 的 “v1.0.0” 版本作为依赖项,他们可以使用 JitPack。在项目的 build.gradle
中,他们可以添加以下配置:
repositories {maven { url 'https://jitpack.io' }
}dependencies {implementation 'com.github.username:MyLibrary:v1.0.0'
}
这里,https://jitpack.io
被添加到 Maven 仓库列表中。然后,implementation 'com.github.username:MyLibrary:v1.0.0'
指定了要使用的库及其版本。JitPack 将会按需构建并提供 “MyLibrary” 版本为 “v1.0.0” 的 JAR 文件。
这样,开发者就可以方便地将 GitHub 上的项目作为 Maven 仓库中的依赖项引入到他们的项目中,而无需将库发布到其他 Maven 仓库。
Java发起Http请求
未设置代理访问www.google.com
package com.oycm.spring_mvc_starter.utils;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;public class HttpRequestUtil {public static void main(String[] args) throws Exception {// 目标 URLString url = "http://www.google.com";// 创建 URL 对象URL apiUrl = new URL(url);// 打开 HTTP 连接HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();// 设置请求方法(GET、POST 等)connection.setRequestMethod("GET");// 获取响应代码int responseCode = connection.getResponseCode();System.out.println("Response Code: " + responseCode);// 读取响应内容BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;StringBuilder response = new StringBuilder();while ((line = reader.readLine()) != null) {response.append(line);}reader.close();// 输出响应内容System.out.println("Response Content:\n" + response.toString());// 关闭连接connection.disconnect();}
}
设置http代理访问www.google.com
System.setProperty("http.proxyHost","127.0.0.1");
System.setProperty("http.proxyPort","33210");
发现设置代理之后,读取响应流会卡住。这个时候也可以来测试下System的properties中有没有加上这个代理参数,通过命令jinfo -sysprops <vimid>来查看。
# eg
jinfo -sysprops 6088