gradle简单入门

安装

需要有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目录中;

配置环境变量

image-20240110152021864

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

image-20240110162757142

3种使用的方式:

  1. 新建Gradle项目,添加一个Gradle Wrapper;
  2. 使用现有的Gradle Wrapper运行项目;
  3. 通过升级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

image-20240111110535371

2.使用Gradle Wrapper

使用Wrapper方式构建是值得推荐的,这个能确保构建的过程可靠的、可控的、标准的。使用Wrapper构建看起来就像使用安装的Gradle构建一样。可以根据操作系统来选中gradlew或gradlew.bat而不是gradle命令。

image-20240111112032151

如果在系统上没有安装可用的gradle版本,Wrapper将会根据gradle-wrapper.properties的配置去下载文件,将其存储在本地。只要配置文件中的distributionUrl没有发送改变,后续的构建调用就会复用之前下载的gradle版本。

3.升级Gradle Wrapper

方式:

  1. 修改gradle-wrapper.properties中的distributionUrl的版本;
  2. 通过执行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

image-20240111133224083

通过这个./gradlew.bat会面临没有代理导致gradle的jar包无法下载的问题,配置代理之后也会出现Gradle Wrapper构建失败的(猜测会不会是多次构建,下载,ip被屏蔽),经过测试发起确实如此

image-20240111133456579

下载失败提示2

可以通过给自动下载的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/'}}}
}

image-20240111133847641

image-20240111133943968

下载被屏蔽测试

通过将配置文件换成gradle仓库,发现会提示要换成https协议,通过allowInsecureProtocol = true可以解决;插件找不到,将下面换的地址换成aliyun的gradle插件地址,发现就能下载了。

协议不支持报错

在这里插入图片描述

找不到id: ‘org.springframework.boot’, version: '3.1.7’这个插件

image-20240111150949507

最终配置

image-20240111145416733

构建成功

image-20240111150358444

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仓库设置身份认证。有两个方式进行认证:

  1. 作为系统配置gradle.properties,放在特定的位置;
  2. 在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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/650820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无线路由探索

实验大纲 第一部分&#xff1a; 探索无线网络 步骤 1&#xff1a; 探索拓扑 步骤 2&#xff1a; 验证连接 第二部分&#xff1a; Wi-Fi 连接添加到董事会议室 步骤 1&#xff1a; 安装新的 LAP-PT 设备以覆盖新的董事会议室 步骤 2&#xff1a; 检验连接 第三部分&#…

Git初识

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 在学习Git之前我们先引入一…

C/C++ - 面向对象编程

面向对象 面向过程编程&#xff1a; 数据和函数分离&#xff1a;在C语言中&#xff0c;数据和函数是分开定义和操作的。数据是通过全局变量或传递给函数的参数来传递的&#xff0c;函数则独立于数据。函数为主导&#xff1a;C语言以函数为主导&#xff0c;程序的执行流程由函数…

外卖跑腿系统开发:构建高效、安全的服务平台

在当今快节奏的生活中&#xff0c;外卖跑腿系统的开发已成为技术领域的一个重要课题。本文将介绍如何使用一些常见的编程语言和技术框架&#xff0c;构建一个高效、安全的外卖跑腿系统。 1. 技术选择 在开始开发之前&#xff0c;我们需要选择适合的技术栈。常用的技术包括&a…

DDT数据驱动测试

简单介绍 ​ DDT&#xff08;Date Driver Test&#xff09;&#xff0c;所谓数据驱动测试&#xff0c; 简单来说就是由数据的改变从而驱动自动化测试的执行&#xff0c;最终引起测试结果的改变。通过使用数据驱动测试的方法&#xff0c;可以在需要验证多组数据测试场景中&…

详细分析Java的树形工具类(含注释)

目录 前言1. 基本框架2. 实战应用 前言 对应的每个子孙属于该父亲&#xff0c;这其实是数据结构的基础知识&#xff0c;那怎么划分怎么归属呢 对应的基本知识推荐如下&#xff1a; 【数据结构】树和二叉树详细分析&#xff08;全&#xff09;【数据结构】B树和B树的笔记详细…

数据结构与算法教程,数据结构C语言版教程!(第六部分、数据结构树,树存储结构详解)二

第六部分、数据结构树&#xff0c;树存储结构详解 数据结构的树存储结构&#xff0c;常用于存储逻辑关系为 "一对多" 的数据。 树存储结构中&#xff0c;最常用的还是二叉树&#xff0c;本章就二叉树的存储结构、二叉树的前序、中序、后序以及层次遍历、线索二叉树、…

Docker部署思维导图工具SimpleMindMap并实现公网远程访问

文章目录 1. Docker一键部署思维导图2. 本地访问测试3. Linux安装Cpolar4. 配置公网地址5. 远程访问思维导图6. 固定Cpolar公网地址7. 固定地址访问 SimpleMindMap 是一个可私有部署的web思维导图工具。它提供了丰富的功能和特性&#xff0c;包含插件化架构、多种结构类型&…

【Unicode】Character ‘ENQUIRY‘ (U+0005)

询问 result.append("\u0005");Unicode Character ‘ENQUIRY’ (U0005)

js中字符串string,遍历json/Object【匹配url、邮箱、电话,版本号,千位分割,判断回文】

目录 正则 合法的URL 邮箱、电话 字符串方法 千位分割&#xff1a;num.slice(render, len).match(/\d{3}/g).join(,) 版本号比较 判断回文 json/Object 遍历 自身属性 for...inhasOwnProperty(key) Object.获取数组(obj)&#xff1a;Object.keys&#xff0c;Object…

深度强化学习(王树森)笔记02

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

taro3 + vue3 + ts 跨平台体验记录

taro3 vue3 ts 跨平台体验记录&#xff0c;根据进度不定期更新。 目标平台包含&#xff1a;H5、微信小程序、APP。开发环境&#xff1a;windows 安装cli【官方安装文档】 npm install -g tarojs/cli常用命令 // 查看taro版本 npm info tarojs/cli创建demo项目 taro init…

spring-boot redis stream消息队列demo-及死信简单处理

Redis stream 是 Redis 5 引入的一种新的数据结构&#xff0c;它是一个高性能、高可靠性的消息队列&#xff0c;主要用于异步消息处理和流式数据处理。在此之前&#xff0c;想要使用 Redis 实现消息队列&#xff0c;通常可以使用例如&#xff1a;列表&#xff0c;有序集合、发布…

【C++】istream类型对象转换为逻辑条件判断值

前言 大家好吖&#xff0c;欢迎来到 YY 滴 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Linux》专…

LiveGBS流媒体平台GB/T28181常见问题-如何快速查看推流上来的摄像头并停止摄像头推流?

LiveGBS流媒体平台GB/T28181常见问题-如何快速查看推流上来的摄像头并停止摄像头推流&#xff1f; 1、负载信息2、负载信息说明3、会话列表查看3.1、会话列表 4、停止会话5、搭建GB28181视频直播平台 1、负载信息 实时展示直播、回放、播放、录像、H265、级联等使用数目 2、负…

Python算法题集_接雨水

本文为Python算法题集之一的代码示例 题目42&#xff1a;接雨水 说明&#xff1a;给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1]…

ElasticSearch7.7.1集群搭建

前言 Elasticsearch&#xff08;ES&#xff09;是一个基于Apache Lucene的分布式、高扩展、近实时的搜索引擎&#xff0c;主要用于海量数据快速存储、实时检索、高效分析的场景。通过简单易用的RESTful API&#xff0c;Elasticsearch隐藏了Lucene的复杂性&#xff0c;使得全文搜…

数论Leetcode204. 计数质数、Leetcode858. 镜面反射、Leetcode952. 按公因数计算最大组件大小

Leetcode204. 计数质数 题目 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 代码 class Solution:def countPrimes(self, n: int) -> int:if n < 2:return 0prime_arr [1 for _ in range(n)]prime_arr[0], prime_arr[1] 0, 0ls list()for i in…

Python编程 从入门到实践(项目二:数据可视化)

本篇为实践项目二&#xff1a;数据可视化。 配合文章python编程入门学习&#xff0c;代码附文末。 项目二&#xff1a;数据可视化 1.生成数据1.1 安装Matplotlib1.2 绘制简单的折线图1.2.1 修改标签文字和线条粗细1.2.2 校正图形1.2.3 使用内置样式1.2.4 使用scatter()绘制散点…

点云格式-PCD格式介绍

PCD格式介绍 一、概述二、PCD 版本三、文件格式头信息四、数据存储格式类型五、优于其他文件格式的优点六、例子 一、概述 PCD文件格式是PCL库最常用的一种数据格式、也是其提供的一个独有的数据格式&#xff0c;PCD文件格式并不是要重新发明轮子&#xff0c;而是为了补充现有的…