Gradle ==> 簡介

1、背景java

  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是同樣的。

2、Gradle 的安裝配置apache

下載api

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

安裝過程直接解壓便可app

配置環境變量框架

而後在Path中添加 %GRADLE_HOME%\binmaven

若是須要指定 gradle 項目本地倉庫的目錄,則增長一個 GRADLE_USER_HOME 環境變量的配置,目錄指定本地倉庫的目錄,以下:ide

測試工具

在命令行窗口輸入:gradle -v 或 gradle -version單元測試

3、Gradle 經常使用命令

  • gradle build
    • 用於徹底構建項目。執行命令執行後,Gradle 將會編譯和測試你的代碼,並生成一個包含全部類與資源的 JAR 文件;
  • gradle clean
    • 刪除 build 目錄和全部爲build生成的文件;
  • gradle assemble
    • 編譯並打包你的代碼, 可是並不運行單元測試。其餘插件會在這個任務里加入更多的步驟;
    • 舉個例子,若是你使用 War 插件,這個任務還將根據你的項目生成一個 WAR 文件;
  • gradle check
    • 編譯並測試你的代碼. 其餘的插件會加入更多的檢查步驟.舉個例子, 若是你使用 checkstyle 插件, 這個任務將會運行 Checkstyle 來檢查你的代碼;

4、Gradle構建Java項目

一、新建一個Java項目

二、配置 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

排除傳遞依賴的方式有兩種:

一、直接在configuration中排除

二、在具體的某個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 目錄下,這是默認配置,能夠進行更改。

5、使用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 便可。 

相關文章
相關標籤/搜索