• Gradle ==> 简介


    一、背景

      Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。 面向Java应用为主。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。
    Gradle的主要功能:
    • 按约定声明构建和建设;
    • 强大的支持多工程的构建;
    • 强大的依赖管理(基于Apache Ivy),提供最大的便利去构建工程;
    • 全力支持已有的 Maven 或者Ivy仓库基础建设;
    • 支持传递性依赖管理,在不需要远程仓库和pom.xml和ivy配置文件的前提下;
    • 基于groovy脚本构建,其build脚本使用groovy语言编写;
    • 具有广泛的领域模型支持构建;
    • 深度 API;
    • 易迁移;
    • 自由和开放源码,Gradle是一个开源项目,基于 ASL 许可。
    为什么使用Groovy:
      完整的Gradle API是使用Groovy语言设计的。这是基于XML内部 DSL 的优点。Gradle是其核心的通用构建工具; 它的主要焦点是Java项目。在这些项目中,团队成员要熟悉Java,这是为了更好的构建透明,给所有团队成员的项目。类似于 Python,Groovy或Ruby语言是最好的构建框架。为什么Groovy被选中?这是因为它为使用Java的人提供了迄今为止最大的透明度。Groovy的基本语法与Java是一样的。

    二、Gradle 的安装配置

    下载

    https://services.gradle.org/distributions/

    安装过程直接解压即可

    配置环境变量

    然后在Path中添加 %GRADLE_HOME%in

    如果需要指定 gradle 项目本地仓库的目录,则增加一个 GRADLE_USER_HOME 环境变量的配置,目录指定本地仓库的目录,如下:

    测试

    在命令行窗口输入:gradle -v 或 gradle -version

    三、Gradle 常用命令

    • gradle build
      • 用于完全构建项目。执行命令执行后,Gradle 将会编译和测试你的代码,并生成一个包含所有类与资源的 JAR 文件;
    • gradle clean
      • 删除 build 目录和所有为build生成的文件;
    • gradle assemble
      • 编译并打包你的代码, 但是并不运行单元测试。其他插件会在这个任务里加入更多的步骤;
      • 举个例子,如果你使用 War 插件,这个任务还将根据你的项目生成一个 WAR 文件;
    • gradle check
      • 编译并测试你的代码. 其他的插件会加入更多的检查步骤.举个例子, 如果你使用 checkstyle 插件, 这个任务将会运行 Checkstyle 来检查你的代码;

    四、Gradle构建Java项目

    1、新建一个Java项目

    2、配置 gradle.build

      在一个 Gradle 项目中一般会有多个 build.gradle 配置文件,我们通常配置最上层的 build.gradle 文件作用于整个工程,对于不同子工程/模块差异的依赖或需求,我们再到对应的 build.gradle 文件中进行配置。

    先来看一个标准的 Gradle 项目配置,如下:

    allprojects {
        group 'com.jack.course'
        version '1.0.0-SNAPSHOT'
        buildDir = 'target'
    
        apply plugin: 'java'
        apply plugin: 'idea'
        apply plugin: 'maven'
    }
    subprojects {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    
        repositories {
            mavenLocal()
            maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
            mavenCentral()
        }
    
        idea {
            module {
                downloadSources = true
                downloadJavadoc = false
                sourceDirs += file('src/main/resources')
            }
        }
    
        configurations {
            all*.exclude group: 'org.apache.logging.log4j', module: 'log4j-slf4j-impl'
            all*.exclude group: 'org.apache.logging.log4j', module: 'log4j-api'
            all*.exclude group: 'org.apache.logging.log4j', module: 'log4j-core'
            all*.exclude group: 'org.apache.logging.log4j', module: 'log4j-1.2-api'
            all*.exclude group: 'org.slf4j', module: 'log4j-over-slf4j'
            all*.exclude group: 'org.slf4j', module: 'slf4j-ext'
            all*.exclude group: 'org.slf4j', module: 'slf4j-log4j12'
            all*.exclude group: 'log4j', module: 'log4j'
    
            deployerJars
        }
    
        dependencies {
            compile('ch.qos.logback:logback-core:1.2.3')
            compile('ch.qos.logback:logback-classic:1.2.3')
            compile('org.projectlombok:lombok:1.18.8')
            compile('com.google.guava:guava:28.0-jre')
            compile('org.apache.commons:commons-lang3:3.9')
            compile('com.google.code.gson:gson:2.8.5')
        }
    }
    Gradle项目配置

    allprojects

    • 定义所有 Project 的构建配置,包括所有的父子工程/模块。
    • group:当前 Gradle 工程的组名,相当于 Maven 中的 groupId;
    • version:定义当前版本,和 Maven 中的 version 一样;
    • buildDir:定义构建目录;
    • apply plugin:引入插件,通常我们需要引入 java、idea 和 maven三个插件;

    subprojects 之下的是对所有子工程/模块的构建配置

    sourceCompatibility = 1.8

    • 指定编译 Java 文件的 JDK 版本;

    targetCompatibility = 1.8

    • 确保编译后的 class 文件与所指定版本或者更新版本的 Java 虚拟机兼容

    repositories

    • 指定 Maven 仓库,去这些仓库找到依赖的包;
    • mavenLocal():本地仓库
    • maven { url 'XXX' }:远程仓库
    • mavenCentral():中央仓库
    • 还能够指定公司私服,由于一般是局域网内的,下载速度较快,所以一般放在本地仓库之后

    idea

    • downloadSources = true:插件自动下载源码;
    • downloadJavadoc = false:不下载Javadoc文件
    • sourceDirs += file('src/main/resources'):指定资源存放目录

    configurations

    排除传递依赖的方式有两种:

    1、直接在configuration中排除

    2、在具体的某个dependency中排除

    configurations {
        compile.exclude module: 'commons'
        all*.exclude group: 'org.gradle.test.excludes', module: 'reports'
    }
    
    dependencies {
        compile("org.gradle.test.excludes:api:1.0") {
            exclude module: 'shared'
        }
    }

    dependencies

    指定依赖的 jar 包或模块,语法如下:

    dependencies {
        compile('org.projectlombok:lombok:1.18.8')
        compile('com.google.guava:guava:28.0-jre')
    }

    模块/工程间的依赖则是如下形式:

    dependencies {
        compile project(":common")
        compile project(":env")
    }
    • compile
      • 用来编译项目源代码的依赖;
    • runtime
      • 在运行时被生成的类使用的依赖。默认也包含了编译时的依赖;
    • testCompile
      • 编译测试代码的依赖。默认包含生成的类运行所需的依赖和编译源代码的依赖;
    • testRuntime
      • 运行测试所需要的依赖。默认包含上面三个依赖;

    SourceSets

    用于指定不同的项目结构,如下:
    sourceSets {
        main {
            java {
                srcDir 'src/main/java'
            }
            resources {
                srcDir 'src/main/resources'
            }
        }
    }

    指定源代码存储在 src/main/java 目录下,资源文件存储在 src/main/resources 目录下,这是默认配置,可以进行更改。

    五、使用Maven插件发布

    apply plugin: 'maven-publish'
    
    # 指定包的groupId、artifactId和version方便以后引用
    ext {
        pubGroupId = "com.jack.dubbo"
        pubProjectName = "dubbo-order-api"
        pubVersion = "0.0.1"
    }
    
    publishing {
        publications {
            publishing.publications.create("${pubProjectName}", MavenPublication) {
                groupId pubGroupId
                artifactId pubProjectName
                version pubVersion
                artifact jar
            }
        }
        // 配置发布到哪里
        repositories {
            maven {
                // 指定要上传的 maven 私服仓库
                url = ""
                // 认证用户和密码
                credentials {
                    username 'root'
                    password 'admin'
                }
            }
        }
    }
    发布配置

    • generateMetadataFileForDubbo-order-apiPublication:生成元数据文件;
    • generatePomFileForDubbo-order-apiPublication:生成 pom 文件;
    • publish:发布到 repositories 中指定的仓库(一般为 Maven 私服);
    • publishDubbo-order-apiPublicationToMavenLocal:执行 publishProject 指定操作到本地仓库
    • publishDubbo-order-apiPublicationToMavenRepository:执行 publishProject 中的操作并发布到指定仓库(私服)
    • publishToMavenLocal:执行所有发布任务中的操作发布到本地 Maven 仓库

    一般在公司就是将项目发布到私服供其他项目使用,直接操作 publish,发布到本地使用 publishToMavenLocal 即可。 

  • 相关阅读:
    AC自动机+全概率+记忆化DP UVA 11468 Substring
    java POI技术之导出数据优化(15万条数据1分多钟)
    验证IP端与数据库Ip端是否重复!!!
    JAVA中IP和整数相互转化(含有掩码的计算)
    Nginx搭建反向代理服务器过程详解
    session原理及实现共享
    Linux部署多个tomcat
    linux下怎么修改mysql的字符集编码
    linux yum 安装mysql
    VM虚拟机下的Linux不能上网
  • 原文地址:https://www.cnblogs.com/L-Test/p/11796883.html
Copyright © 2020-2023  润新知