gradle简单入门

news2024/9/23 19:15:56

安装

需要有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/wrapper

curl --location --output gradle-wrapper.jar.sha256 https://services.gradle.org/distributions/gradle-{gradleVersion}-wrapper.jar.sha256

echo "gradle-wrapper.jar" >> gradle-wrapper.jar.sha256

sha256sum --check gradle-wrapper.jar.sha256

# mac
cd gradle/wrapper

curl --location --output gradle-wrapper.jar.sha256 https://services.gradle.org/distributions/gradle-{gradleVersion}-wrapper.jar.sha256

echo "gradle-wrapper.jar" >> gradle-wrapper.jar.sha256

shasum --check gradle-wrapper.jar.sha256

# Windows
expected = Invoke-RestMethod -Uri https://services.gradle.org/distributions/gradle-8.5-wrapper.jar.sha256

actual = (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 wrapper

gradle 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 {
        // 目标 URL
        String 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.coloradmin.cn/o/1421031.html

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

相关文章

C语言——如何进行文件操作

大家好&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流 本文由&#xff1a;残念ing原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&#xff0c;欢迎各位→…

C语言探索:水仙花数的奥秘与计算

摘要&#xff1a; 水仙花数&#xff0c;一种特殊的三位数&#xff0c;其各位数字的立方和等于该数本身。本文将详细介绍水仙花数的定义、性质&#xff0c;以及如何使用C语言来寻找100至999范围内的水仙花数。 目录 一、水仙花数的定义与性质 二、用C语言寻找100至999范围内的…

AJAX的原理(重点)

◆ XMLHttpRequest 什么是XMLHttpRequest&#xff1f; 定义&#xff1a; 关系&#xff1a;axios 内部采用 XMLHttpRequest 与服务器交互 注意&#xff1a;直白点说就是axios内部就是封装了XMLHttpRequest这个对象来实现发送异步请求的 使用 XMLHttpRequest 步骤&#xff1a…

聊聊用户故事地图

这是鼎叔的第八十五篇原创文章。行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。 欢迎关注本专栏和微信公众号《敏捷测试转型》&#xff0c;星标收藏&#xff0c;大量原创思考文章陆续推出。本人新书《无测试组织-测试团队的敏捷转型》已出版&#xff08;机械工业出版社&…

npm安装下载修改镜像源

问题描述一 npm install 时&#xff0c;报错&#xff1a;npm ERR! network request to https://registry.npmjs.org/postcss-pxtorem failed, reason: connect ETIMEDOU&#xff0c;这是因为默认npm安装会请求国外的镜像源&#xff0c;导致下载缓慢容易断开请求下载失败的 np…

第九节HarmonyOS 常用基础组件18-checkBox

1、描述 提供多选框组件&#xff0c;通常用于某选项的打开或关闭。 2、接口 Checkbox(options:{name?: string, group?: string}) 3、参数 参数名 参数类型 必填 描述 name string 否 多选框名称 group string 否 多选框群组名称。&#xff08;未配合使用Chec…

Coppeliasim倒立摆demo

首先需要将使用Python远程控制的文件导入到文件夹&#xff0c;核心是深蓝色的三个文件。 本版本为4.70&#xff0c;其文件所在位置如下图所示&#xff0c;需要注意的是&#xff0c;目前不支持Ubuntu22的远程api&#xff1a; 双击Sphere这一行的灰色文件&#xff0c;可以看到远程…

【C++版】排序算法详解

目录 直接插入排序 希尔排序 选择排序 冒泡排序 堆排序 快速排序 hoare法 挖坑法 前后指针法 非递归版本 快速排序中的优化 归并排序 递归版本 非递归版本 计数排序 总结 直接插入排序 直接插入排序的思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入…

ICMP——网际控制报文协议

目录 1.1 网际控制报文协议 ICMP 1.2 ICMP 报文的格式 1.2.1 ICMP 报文的种类 ICMP 差错报告报文 ICMP 询问报文 1.3 ICMP 的应用 1.4 ICMP抓包 1.4.1 ICMP请求包&#xff08;request&#xff09; 1.4.2 ICMP应答包&#xff08;reply&#xff09; 1.1 网际控制报文协议…

解决maven 在IDEA 下载依赖包速度慢的问题

1.idea界面双击shift键 2.打开setting.xml文件 复制粘贴 <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sc…

Spring AOP实现

Spring AOP实现 AOP概述什么是AOP什么是Spring AOP Spring AOP快速入门引入依赖实现计时器 Spring AOP详解Spring AOP核心概念切点(Pointcut)连接点(Join Point)通知(Advice)切面(Aspect) 通知类型注意事项 PointCut多个切面切面优先级 Order切点表达式execution表达式annotati…

【开源】基于JAVA的就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

双链表的基本知识以及增删查改的实现

满怀热忱&#xff0c;前往梦的彼岸 前言 之前我们对单链表进行了非常细致的剖析&#xff0c;现在我们所面临的则是与之相对应的双链表&#xff0c;我会先告诉诸位它的基本知识&#xff0c;再接着把它的增删查改讲一下&#xff0c;ok&#xff0c;正文开始。 一.链表的种类 我…

07.领域驱动设计:掌握整洁架构、六边形架构以及3种常见微服务架构模型的对比和分析

目录 1、概述 2、整洁架构 3、六边形架构 4、三种微服务架构模型的对比和分析 5、从三种架构模型看中台和微服务设计 5.1 中台建设要聚焦领域模型 5.2 微服务要有合理的架构分层 5.2.1 项目级微服务 5.2.2 企业级中台微服务 5.3 应用和资源的解耦与适配 6、总结 1、概…

三步万能公式解决软件各种打不开异常

程序员都知道,辛苦做的软件发给客户打不开那是一个大写的尴尬,尴尬归尴尬还是要想办法解决问题. 第一步清理环境. 目标机台有环境和没有运行环境的,统统把vs环境卸载了,让目标机台缺少环境.第二步打包环境 源代码添加打包工程,setup,重新编译.![添加setup ](https://img-blo…

LeetCode——415. 字符串相加

C开头 &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#…

【架构论文】SCALE: Secure and Scalable Cache Partitioning(2023 HOST)

SCALE: Secure and Scalable Cache Partitioning 摘要 LLC可以提高性能&#xff0c;但是会引入安全漏洞&#xff0c;缓存分配的可预测变化可以充当侧信道&#xff0c;提出了一种安全的缓存分配策略&#xff0c;保护缓存免受基于时间的侧信道攻击。SCALE使用随机性实现动态可扩…

AI大模型专题:2024大模型安全流通平台市场厂商评估报告

今天分享的是AI大模型系列深度研究报告&#xff1a;《AI大模型专题&#xff1a;2024大模型安全流通平台市场厂商评估报告》。 &#xff08;报告出品方&#xff1a;揽睿星舟&#xff09; 报告共计&#xff1a;22页 大模型安全流通平台市场分析 企业需要大模型安全流通平台覆盖…

C语言 开发篇+一个简单的数据库管理系统ZDB

说明&#xff1a;本文供数据库爱好者和初级开发人员学习使用 标签&#xff1a;数据库管理系统、RDBMS、C语言小程序、C语言、C程序 系统&#xff1a;Windows 11 x86 CPU &#xff1a;Intel IDE &#xff1a;CLion 语言&#xff1a;C语言 标准&#xff1a;C23 提示&#xff1a;如…

C语言用SHBrowseForFolder弹出选择文件夹的对话框

【程序运行效果】 【程序代码】 main.c&#xff1a; #define COBJMACROS #include <stdio.h> #include <tchar.h> #include <Windows.h> #include <windowsx.h> #include <CommCtrl.h> #include <ShlObj.h> #include "resource.h&q…