找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2642

积分

0

好友

364

主题
发表于 17 小时前 | 查看: 0| 回复: 0

你是否也曾为Java项目的依赖管理感到头疼?面对Maven冗长的XML配置文件和缓慢的构建速度,是时候了解一下更现代、更高效的构建工具——Gradle了。本文将手把手教你使用Gradle搭建Java开发环境,并深入探讨其在依赖管理上的优势。

准备与Gradle安装

Gradle支持目前大多数主流操作系统,并且需要JDK1.8及以上版本。

C:\>java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

下载

官方下载地址为Gradle下载,根据自己的操作系统下载即可,安装文件分为两种,一种是二进制ZIP包,另一种是完整版本它除了二进制包外还有文档和源码,实际上如果只是使用Gradle这个自动化构建工具的话,下载第一种即可。

环境配置

  • 方式一:在系统环境变量的path选项中,直接添加gradle根目录下的bin文件夹路径,例如 C:\Gradle\bin
  • 方式二:添加根路径变量名 GRADLE_HOME,变量值为 C:\Gradle 也就是bin文件夹路径的上层路径,然后再path中添加 %GRADLE_HOME%\bin; 相对路径

环境验证

配置好后,需要重新打开或新启动一个命令行窗口,让系统环境变量生效。在新窗口中输入 gradle -v,得到如下窗口所示内容,则表示环境安装配置成功。

Gradle版本验证命令行输出

创建工程

启动IDEA,并点击Create New Project。

IntelliJ IDEA欢迎界面

选择Gradle,并选择自己的JDK版本以及库。

新建Gradle项目类型选择

然后下一步,输入工程的名称以及存储路径。

设置Gradle项目名称与路径

然后进入工程的构建过程。

Gradle项目初始构建与依赖下载

如果右上角有如下图中提醒弹出,需点击后边的选项。

IDEA构建成功提示界面

配置IDEA

IDEA中Gradle设置面板

项目构建成功后,目录结构如下所示。

Gradle项目结构及build.gradle文件

配置远程仓库

在Gradle安装目录下的 init.d 文件夹下,新建一个 init.gradle 文件,里面填写以下配置。

Gradle安装目录下的init.d文件夹

allprojects {
    repositories {
        maven { url 'file:///C:/Java/maven_repositoryD:/apache-maven-3.6.2/repository'}
        mavenLocal()
        maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }
        maven { name "Bstek" ; url "http://nexus.bsdn.org/content/groups/public/" }
        mavenCentral()
 maven {url "https://maven.aliyun.com/repository/public"}
 maven {url "https://maven.aliyun.com/repository/jcenter"}
 maven {url "https://maven.aliyun.com/repository/spring"}
 maven {url "https://maven.aliyun.com/repository/spring-plugin"}
 maven {url "https://maven.aliyun.com/repository/gradle-plugin"}
 maven {url "https://maven.aliyun.com/repository/google"}
 maven {url "https://maven.aliyun.com/repository/grails-core"}
 maven {url "https://maven.aliyun.com/repository/apache-snapshots"}
    }
    buildscript { 
        repositories { 
            maven { name "Alibaba" ; url 'https://maven.aliyun.com/repository/public' }
            maven { name "Bstek" ; url 'http://nexus.bsdn.org/content/groups/public/' }
            maven { name "M2" ; url 'https://plugins.gradle.org/m2/' }
        }
    }
}

repositories中写的是获取jar包的顺序。先是本地的Maven仓库路径;接着的mavenLocal()是获取Maven本地仓库的路径,应该是和第一条一样,但是不冲突;第三条和第四条是从国内和国外的网络上仓库获取;最后的 mavenCentral() 是从Apache提供的中央仓库获取 jar 包。

配置依赖

这点也是Gradle相较Maven的优势之一了。相较于maven一大串的XML配置,gradle的依赖项仅需一行。

dependencies {
    testImplementation 'junit:junit:4.13'
    implementation 'com.google.code.gson:gson:2.8.6'
}

gradle依赖的粒度控制相较于Maven也更加精细,maven只有compile、provided、test、runtime四种scope,而gradle有以下几种scope:

  1. implementation,默认的scope。implementation的作用域会让依赖在编译和运行时均包含在内,但是不会暴露在类库使用者的编译时。举例,如果我们的类库包含了gson,那么其他人使用我们的类库时,编译时不会出现gson的依赖。
  2. api,和implementation类似,都是编译和运行时都可见的依赖。但是api允许我们将自己类库的依赖暴露给我们类库的使用者。
  3. compileOnlyruntimeOnly,这两种顾名思义,一种只在编译时可见,一种只在运行时可见。而runtimeOnly和Maven的provided比较接近。
  4. testImplementation,这种依赖在测试编译时和运行时可见,类似于Maven的test作用域。
  5. testCompileOnlytestRuntimeOnly,这两种类似于compileOnly和runtimeOnly,但是作用于测试编译时和运行时。

通过简短精悍的依赖配置和多种多样的作用与选择,Gradle可以为我们提供比Maven更加优秀的依赖管理功能。

Maven和Gradle

-Maven的配置文件是XML格式的,假如你的项目依赖的包比较多,那么XML文件就会变得非常非常长;
-XML文件不太灵活,假如你需要在构建过程中添加一些自定义逻辑,搞起来非常麻烦;
-Maven非常的稳定,但是相对的就是对新版java支持不足,哪怕就是为了编译java11,也需要更新内置的Maven插件

-速度,gradle使用构建缓存、守护进程等方式提高编译速度。结果就是gradle的编译速度要远超maven,平均编译速度比Maven快好几倍,而且项目越大,这个差距就越明显
-灵活性,gradle要比Maven灵活太多,虽然有时候灵活并不是一件好事情。但是大部分情况下,灵活一点可以极大地方便我们。Maven死板的XML文件方式做起事情来非常麻烦。很多Maven项目都通过执行外部脚本的方式来完成一些需要灵活性的工作。而在gradle中配置文件就是构建脚本,构建脚本就是编程语言(groovy编程语言),完全可以自给自足,无需外部脚本
-简洁性,完成同样的功能,gradle脚本的长度要远远短于maven配置文件的长度。虽然很多人都说XML维护起来不麻烦,但是我觉得,维护一个光是依赖就有几百行的XML文件,不见得就比gradle脚本简单

实战

在build.gradle文件中增加依赖。

plugins {
    id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
    mavenCentral()
}
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    // https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java
    compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.0.0-alpha-6'
    // https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver
    compile group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '4.0.0-alpha-6'
}

编写如下代码并执行。

import org.openqa.selenium.*;
import java.util.Arrays;
import java.util.List;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
class JavaScriptToDo {
    public static void javaScriptClick(WebDriver driver, String id) {
        WebElement element = driver.findElement(By.id(id));
        try{
            if(element.isEnabled() && element.isDisplayed()){
                System.out.println("使用JS进行也面元素单击");
                //执行JS语句arguments[0].click();
                ((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
            }else {
                System.out.println("页面上元素无法进行单击操作");
            }
        }catch (StaleElementReferenceException e){
            System.out.println("页面元素没有附加在页面中" + Arrays.toString(e.getStackTrace()));
        }catch (NoSuchElementException e){
            System.out.println("在页面中没有找到要操作的元素" + Arrays.toString(e.getStackTrace()));
        }catch (Exception e){
            System.out.println("无法完成单击操作" + Arrays.toString(e.getStackTrace()));
        }
    }
    public static void highLightElement(WebDriver driver, WebElement element){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        /**
         * 调用js将传入参数的页面元素对象的背景颜色和边框颜色分别设定为黄色和红色
         */
        js.executeScript("arguments[0].setAttribute('style', arguments[1]);", element, "background: yellow; border:2px solid red;");
    }
    public static void main(String[] args) throws InterruptedException {
        WebDriver driver = new ChromeDriver();
        driver.get("http://www.baidu.com");
        Thread.sleep(10);
        driver.findElement(By.id("kw")).sendKeys("davieyang");
        String id = "su";
        WebElement element = driver.findElement(By.id(id));
        JavaScriptToDo.javaScriptClick(driver, id);
        JavaScriptToDo.highLightElement(driver, element);
        driver.quit();
    }
}

希望通过这篇从环境搭建到实战演练的指南,能帮助你快速上手Gradle,并体会到其在Java项目构建和依赖管理上的强大与便捷。如果你在实践过程中有更多心得或疑问,欢迎到云栈社区与广大开发者一同交流探讨。




上一篇:如何解决传统暖风机痛点?从热流重构到材料创新的全链路设计解析
下一篇:聊聊我那台1折入手的红魔6:165Hz风扇加持的骁龙888“暖手宝”
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-2 22:44 , Processed in 0.309573 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表