成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【Java】gradle簡(jiǎn)單理解

bigdevil_s / 3376人閱讀

摘要:的整體設(shè)計(jì)是以作為一種語言為導(dǎo)向的,而非成為一個(gè)嚴(yán)格死板的框架。它整合了傳統(tǒng)的靜態(tài)代碼檢查,并對(duì)單元測(cè)試覆蓋率和代碼重復(fù)率進(jìn)行數(shù)據(jù)統(tǒng)計(jì)。排除傳遞依賴有多種原因,遠(yuǎn)程倉(cāng)庫(kù)中不存在,運(yùn)行時(shí)不需要,或者版本沖突。

簡(jiǎn)介(百度百科)

定義:Gradle是一個(gè)基于Apache Ant和Apache Maven概念的項(xiàng)目自動(dòng)化構(gòu)建開源工具。它使用一種基于Groovy的特定領(lǐng)域語言(DSL)來聲明項(xiàng)目設(shè)置,目前也增加了基于Kotlin語言的kotlin-based DSL,拋棄了基于XML的各種繁瑣配置。
簡(jiǎn)介:Gradle是一個(gè)基于JVM的構(gòu)建工具,是一款通用靈活的構(gòu)建工具,支持maven, Ivy倉(cāng)庫(kù),支持傳遞性依賴管理,而不需要遠(yuǎn)程倉(cāng)庫(kù)或者是pom.xml和ivy.xml配置文件,基于Groovy,build腳本使用Groovy編寫

日常使用:

gradle對(duì)多工程的構(gòu)建支持很出色,工程依賴是gradle的第一公民。

gradle支持局部構(gòu)建。 支持多方式依賴管理:包括從maven遠(yuǎn)程倉(cāng)庫(kù)、nexus私服、ivy倉(cāng)庫(kù)以及本地文件系統(tǒng)的jars或者dirs

gradle是第一個(gè)構(gòu)建集成工具,與ant、maven、ivy有良好的相容相關(guān)性。

輕松遷移:gradle適用于任何結(jié)構(gòu)的工程,你可以在同一個(gè)開發(fā)平臺(tái)平行構(gòu)建原工程和gradle工程。通常要求寫相關(guān)測(cè)試,以保證開發(fā)的插件的相似性,這種遷移可以減少破壞性,盡可能的可靠。這也是重構(gòu)的最佳實(shí)踐。

gradle的整體設(shè)計(jì)是以作為一種語言為導(dǎo)向的,而非成為一個(gè)嚴(yán)格死板的框架。

免費(fèi)開源

所以:
gradle就是又能干maven的活,又能干ant的活,用groove語言寫腳本,表達(dá)能力還更強(qiáng)。

語句詳解

最外層的build.gradle
1、buildscript里是gradle腳本的執(zhí)行所需依賴,分別是對(duì)應(yīng)的maven庫(kù)和插件

buildscript {
    repositories {
        maven { 
            url = "http://maven.repos.xxx.com/nexus/content/groups/public/"  // 加載私有Maven倉(cāng)庫(kù) 
        }
    }
    dependencies {
        classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:1.2" // 加載插件,用到里面的函數(shù)方法
    }
}


apply plugin: "org.sonarqube" //接入sonarqube,代碼質(zhì)量管理。它整合了傳統(tǒng)的靜態(tài)代碼檢查,并對(duì)單元測(cè)試覆蓋率和代碼重復(fù)率進(jìn)行數(shù)據(jù)統(tǒng)計(jì)。
sonarqube { // 同級(jí)配置gradle.properties
    properties {
        property "sonar.host.url", System.getenv("SONAR_HOST_URL")
        property "sonar.login", System.getenv("SONAR_LOGIN")
        property "sonar.password", System.getenv("SONAR_PASSWORD")
    }
}

2、 allprojects里是項(xiàng)目本身需要的依賴,比如我現(xiàn)在要依賴我自己maven庫(kù)的xx庫(kù),那么我應(yīng)該將maven {url ‘http://maven.repos.xxx.com/ne...‘}寫在這里,而不是buildscript中,不然找不到。

//這個(gè)allprojects{}就是一個(gè)Script Block  
allprojects {
    apply plugin: "eclipse"
    apply plugin: "idea"
    repositories { //一個(gè)Script Block 
        mavenLocal()  // 優(yōu)先從本地倉(cāng)庫(kù)下載
        maven {
            url  "http://maven.repos.xxx.com/nexus/content/groups/public/"
        }
    }
    eclipse {
        classpath {
            downloadSources=true // 插件的配置
        }
    }
    group = "com.xxx"    // 公司名
    version = "1.3.2"    // 版本號(hào)
}

3、排除傳遞依賴。排除傳遞依賴有多種原因,遠(yuǎn)程倉(cāng)庫(kù)中不存在,運(yùn)行時(shí)不需要,或者版本沖突。排除傳遞依賴的方式有兩種:

直接在configuration中排除

在具體的某個(gè)dependency中排除

subprojects {

   configurations { 
       compile.exclude group:"org.codehaus.jackson",module:"jackson-mapper-asl" // 排除依賴
   }
   //config java
   sourceCompatibility = compatibilityVersion
   targetCompatibility = compatibilityVersion
   [compileJava, javadoc, compileTestJava]*.options*.encoding = encoding
   sourceSets {
       main {
           resources {
               srcDirs("src/main/java")      //將java目錄加入到resources的目錄里面,java的子目錄里面有一些mapper的xml
           }
       }
   }
   checkstyle { // 格式檢測(cè)
       configFile = file(rootDir.getAbsolutePath() + "/config/checkstyle/checkstyle.xml")
       System.setProperty("parent_dir", rootDir.getAbsolutePath())
   }
   findbugs { // 檢測(cè)語法相關(guān)規(guī)則
       excludeFilter = file(rootDir.getAbsolutePath() + "/config/findbugs/findbugs-exclude.xml")
   }

   /**
    * gradle工程匯總所有的jar包的坐標(biāo)都在dependencies屬性中設(shè)置
    * 每個(gè)jar包的坐標(biāo)都有三個(gè)基本元素組成
    * group, name, version
    * testCompile標(biāo)識(shí)該jar包在測(cè)試的時(shí)候起作用,該屬性為jar包的作用域
    * 我們?cè)趃radle里面添加坐標(biāo)時(shí)都需要帶上jar包的作用域

     */
    dependencies {
        compile("com.xxx:dubbo-service-common:2.0.2-SNAPSHOT"){
            exclude module:"kryo" // 排除依賴
            exclude module:"minlog"
            exclude module:"zkclient"
            exclude module:"netty"
            exclude module:"spring-beans"
            exclude module:"spring-core"
            exclude module:"spring-context"
            exclude module:"spring-aop"
            exclude module:"spring-expression"
            exclude module:"spring-web"
        }
        compile(
                "com.xxx:xxx-java-common:3.1.6-SNAPSHOT", // 依賴,group:module:version
                "com.xxx:seller-service-api:0.2.3",
                "com.xxx.bigdata.sea:opsea-interface:1.0-SNAPSHOT",
                "com.xxx:member-service-model:2.0.17",
                "com.xxx.common:jfalcon:1.1.0"
        )
        compile("com.xxx:payment-service-api:1.4") { transitive = false }
    }
    tasks.withType(FindBugs) { // 對(duì)FindBugs啟用HTML報(bào)告
        reports {
            xml.enabled = false
            html.enabled = true
        }
    }
 
    // 生成jar包和source代碼映射
    task sourcesJar(type: Jar, dependsOn: classes) { 
        classifier = "sources"
        from sourceSets.main.allSource
    }
    task javadocJar(type: Jar, dependsOn: javadoc) {
        classifier = "javadoc"
        from javadoc.destinationDir
    }
    artifacts {
        archives sourcesJar
        archives javadocJar
    }
 
}
defaultTasks "clean", "build"
task wrapper(type: Wrapper) {
    gradleVersion = "2.2.1"
}

2、common-service-api/build.gradle

// jar包的清單屬性
jar {
    manifest {
        attributes "Implementation-Title": "common-service-api", "Implementation-Version": version
    }
}
// 依賴的插件
dependencies {
    compile(
            "org.jboss.resteasy:jaxrs-api:3.0.7.Final",
            "org.hibernate:hibernate-validator:5.1.3.Final",
            "com.xxx:jackson-mapper-asl-internal:1.9.13"
    )
}
// 排除依賴
configurations {
    compile.exclude module:"mockito-all"
}
// 文件名
archivesBaseName = "common-service-api"
// 發(fā)布jar的命令, 執(zhí)行g(shù)radle uploadArchives
// 把jar 包發(fā)布到本地或者是遠(yuǎn)程,或者多個(gè)目錄下
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "http://maven.repos.xxx.com/nexus/content/repositories/releases/"){
                authentication(userName: "deployment", password: "deployment123456")
            }
            snapshotRepository(url: "http://maven.repos.xxx.com/nexus/content/repositories/snapshots") {
                authentication(userName: "deployment", password: "deployment123456");  
            }
            pom.project{
                name project.name
                packaging "jar"
                description "common service api"
            }
        }
    }
}
// javadoc部署
task javadocDeploy(type:Exec){
    workingDir "build/docs/javadoc"
    commandLine "cp","-r","./","/home/centos/javadoc/ROOT/javadoc/financeService/api"
     
    standardOutput = new ByteArrayOutputStream()
    ext.output = {
      return standardOutput.toString()
    }
}
task javadocDelete(type:Exec){
    commandLine "rm","-rf","/home/centos/javadoc/ROOT/javadoc/financeService/api/*"
}
javadocDeploy.dependsOn javadoc,javadocDelete
javadoc {
    options {
        encoding "UTF-8"
        charSet "UTF-8"
    }
}

3、common-service-provider/build.gradle

compile 放在這個(gè)configuration下的依賴是在編譯代碼時(shí)所使用的,但它作為一個(gè)分組,包含代碼和編譯所需的依賴。

runtime 代碼在運(yùn)行時(shí)需要的依賴,默認(rèn),也會(huì)包含compile中的依賴。

testCompile 編譯測(cè)試代碼時(shí)所需要的依賴,默認(rèn),被編譯的代碼和代碼需要的編譯依賴也屬于該分組。

testRuntime 運(yùn)行測(cè)試時(shí)需要的依賴。默認(rèn),包含compile,runtime和testCompile的分組的構(gòu)建和依賴。

compile("org.apache.flume.flume-ng-clients:flume-ng-log4jappender:1.6.0"){

   exclude module:"jackson-core-asl"
   exclude module:"jackson-mapper-asl" 
   exclude module:"netty"
   exclude module:"libthrift"}
   runtime("org.hibernate:hibernate-validator:5.1.3.Final",
           "javax.el:javax.el-api:2.2.4",
           "com.sun.el:el-ri:1.0",
           "mysql:mysql-connector-java:5.1.34",
           "org.apache.zookeeper:zookeeper:3.4.6",
           "com.101tec:zkclient:0.3",
           "org.slf4j:slf4j-log4j12:1.7.12")
   testCompile(
           "junit:junit:4.12",
           "org.springframework:spring-test:4.2.1.RELEASE",
           "com.h2database:h2:1.4.186",
           "org.mockito:mockito-all:1.10.19",
           "org.powermock:powermock-module-junit4-rule-agent:1.6.4",
           "org.powermock:powermock-module-junit4:1.6.4",
           "org.powermock:powermock-api-mockito:1.6.4",
           "uk.co.jemos.podam:podam:6.0.2.RELEASE"
   )

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75812.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<