使用groovy指令碼使gradle靈活載入本地jar包的兩種方式
阿新 • • 發佈:2018-11-20
本人在使用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