1. 程式人生 > >使用groovy指令碼使gradle靈活載入本地jar包的兩種方式

使用groovy指令碼使gradle靈活載入本地jar包的兩種方式

本人在使用Jenkins做測試專案的可持續整合過程中,構建工具用的gradle,但由於一些jar包是並私有倉庫給用,暫時沒有搭建計劃。這就導致了我構建專案的時候需要的jar的地址往往是不一樣的,而且伺服器和本地的版本可能也有所差別,經常其他同學提交程式碼時候把build.gradle檔案一併提交了,倒是倉庫檔案比較亂。為了解決這個問題,看了一些資料再研究了一點點gradle的使用後總結了兩種方法。
第一種思路:把每個人的專案依賴的jar包地址給固定了,然後用判斷當前使用者是哪個,再去給complie files引數賦值。比較笨,但是比較容易理解,由於框架的jar包和一些固定的jar包版本不怎麼發生變化,維護成本較低。也是我這個菜鳥想到的第一個辦法,雖然已經不用了,還是記錄一下比較好

第二種思路:每次去區域網伺服器下載jar包,比對版本,如果一樣則下載到專案的資料夾裡,再去給complie files引數賦值。這個比較簡單,而且能夠做到jar包版本更新的時候自動同步(服務端的jar有Jenkins生成)。暫時想到的比較好的辦法。

分享一下程式碼,供大家參考:

buildscript {
    ext {
        springBootVersion = '1.5.13.RELEASE'
    }
    repositories {
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.fission.test'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenLocal()
    mavenCentral()
}
def jarversion = "api_test_najm-1.0-SNAPSHOT.jar"
def path = getPath2(jarversion)

def getPath() {
    def local;
    File file1 = new File("/Users/Vicky/Documents/workspace/api_test_najm/build/libs/api_test_najm-1.0-SNAPSHOT.jar")
    File file2 = new File("/go/jar/api_test_najm-1.0-SNAPSHOT.jar")
    if (file1.exists()) {
        local = file1.getAbsoluteFile()
    } else if (file2.exists()) {
        local = file2.getAbsoluteFile()
    }
    println local
    return local
}

def getPath2(String v) {
    def jarpath = new File("").getAbsolutePath() + "/long/" + v
    if (new File(jarpath).exists()) return jarpath
    def url = new URL("http://**.***.**.**:****/go/jar/" + v)
    def out = new FileOutputStream(jarpath)
    out << url.newInputStream()
    return jarpath
}


dependencies {
    runtime('org.springframework.boot:spring-boot-devtools')
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    compile "org.springframework.boot:spring-boot-starter-thymeleaf"
    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.0'
    compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.0'
    compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.8.0-beta2'
    compile files(path)
}

由於之前接觸過groovy語言,寫起了也非常順手,先簡單寫個例子。以後有機會繼續分享gradle自定義指令碼任務和Jenkins整合的實踐經驗。

發個廣告:框架已經在碼雲開源 邀請連結

歡迎有興趣的一起交流:群號:340964272