gradle 自定義打包項(xiàng)目tar包


title: gradle自定義打包項(xiàng)目tar包
date: 2017-09-18 16:41:52
tags: [Gradle]
categories: "Gradle"


gradle 自定義打包項(xiàng)目tar包

本文主要是想介紹如何使用gradle管理java項(xiàng)目娄徊,并實(shí)現(xiàn)自定義打包部署tar包的完整過程嘉赎。使用的打包項(xiàng)目是一個springboot 項(xiàng)目绢涡,其他java 項(xiàng)目同理適用。

先來看下這個spring boot項(xiàng)目的目錄結(jié)構(gòu):

.
|-- build.gradle
|-- gradle
|   `-- wrapper
|       `-- gradle-wrapper.properties
|-- gradlew
|-- gradlew.bat
`-- src
    |-- main
    |   |-- java   
    |   `-- resources
    |       |-- bin
    |       |   |-- start.sh
    |       |   `-- stop.sh
    |       |-- dev
    |       |   |-- application.properties
    |       |   `-- log4j.properties
    |       |-- online
    |       |   |-- application.properties
    |       |   `-- log4j.properties
    `-- test   

如上是一個典型的Java項(xiàng)目,有源碼目錄src/main/java 著角,有資源目錄 src/main/resources长已,資源下有腳本目錄bin,以及多個環(huán)境的配置文件(dev && online)鸣驱,除外還有test 模塊泛鸟。

下邊針對這么一個項(xiàng)目,如何編寫build.gradle 文件丐巫,從而實(shí)現(xiàn)自定義打包部署tar包谈况。tar包解壓后期望的目錄結(jié)構(gòu)如下:

.
|-- bin
|   |-- start.sh
|   `-- stop.sh
|-- conf
|   |-- application.properties
|   `-- log4j.properties
|-- currentpid
|-- lib
`-- logs
    `-- console.log

直接對照 成型的 build.gradle 進(jìn)行講解:

buildscript {
    ext {
        springBootVersion = '1.5.6.RELEASE'
    }
    repositories {     // 指定倉庫
        mavenLocal()       
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

// 聲明使用的插件
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'distribution'   //打包tar包用到的插件

version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.7    //JDK版本

repositories {
    mavenCentral()
}

// 指定項(xiàng)目的結(jié)構(gòu)
sourceSets {
    main {
        java {
            srcDirs 'src/main/java'
        }
    }
}
//判斷 build命令是否指定屬性 profile。
//例如 gradle buildTar -xtest -Pprofile=online

ext {
    if (project.hasProperty('profile')) {
        profile = project['profile']
    } else {
        profile = "dev"
    }
    println "profile:" + profile
}
// task 用來新建一些目錄递胧,目錄位于build/package下
task createDirs() << {
    file('build/package/lib').mkdirs()
    file('build/package/bin').mkdirs()
    file('build/package/logs').mkdirs()
    file('build/package/conf').mkdirs()
}
//task 用來復(fù)制build出來的主jar包
task copyLibs(type: Copy) {
    from('build/libs')
    into('build/package/lib')
}
//task 用來復(fù)制配置文件
task copyConf(type: Copy) {
    println 'copy conf from src/main/resources/'+profile
    from('src/main/resources/'+profile)
    into('build/package/conf')
}
//task 用來復(fù)制bin下的腳本碑韵。這里的fileMode并沒有生效,原因不詳
task copyBin(type: Copy) {
    from('src/main/resources/bin')
    into('build/package/bin')
    fileMode 0744
}
// task 用來復(fù)制啟動所依賴的jar包
task copyDep(type: Copy) {
    from configurations.runtime
    into 'build/package/lib'
}
//把上述的task串聯(lián)起來
task prepareFile(dependsOn: [
        'createDirs',
        'copyLibs',
        'copyConf',
        'copyBin',
        'copyDep'
]){}
//指定打包的tar包的名字缎脾,以及文件來源目錄
distributions {
    monitor {
        baseName = 'azkaban-monitor'
        contents {
            from { 'build/package' }
        }
    }

}
//項(xiàng)目所依賴的jar包
dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.springframework.boot:spring-boot-devtools')
    compile('org.springframework.boot:spring-boot-configuration-processor')
    compile('org.springframework.data:spring-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile group: 'log4j', name: 'log4j', version: '1.2.17'
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.21'
    compile group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.3.1'
    compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.1'
    compile group: 'commons-configuration', name: 'commons-configuration', version: '1.8'
    compile group: 'net.sf.jopt-simple', name: 'jopt-simple', version: '4.9'
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.41'
    compile group: 'org.apache.commons', name: 'commons-jexl', version: '2.1.1'
    compile group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '1.3.0'
    compile group: 'org.apache.curator', name: 'curator-recipes', version: '4.0.0'
    compile group: 'com.alibaba', name: 'fastjson', version: '1.2.33'

    testCompile('org.springframework.boot:spring-boot-starter-test')
}

//distribution 插件的特性祝闻,以DistTar結(jié)尾
monitorDistTar.dependsOn  'prepareFile'
monitorDistTar.compression = Compression.GZIP
monitorDistTar.extension = 'tar.gz'

//定義一個task,先build 然后再打包tar包
task buildTar(dependsOn: [
        'build',
        monitorDistTar
]){}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遗菠,一起剝皮案震驚了整個濱河市联喘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辙纬,老刑警劉巖豁遭,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贺拣,居然都是意外死亡蓖谢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門譬涡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闪幽,“玉大人,你說我怎么就攤上這事涡匀《㈦纾” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵陨瘩,是天一觀的道長腕够。 經(jīng)常有香客問我级乍,道長,這世上最難降的妖魔是什么燕少? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任卡者,我火速辦了婚禮,結(jié)果婚禮上客们,老公的妹妹穿的比我還像新娘崇决。我一直安慰自己,他們只是感情好底挫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布恒傻。 她就那樣靜靜地躺著,像睡著了一般建邓。 火紅的嫁衣襯著肌膚如雪盈厘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天官边,我揣著相機(jī)與錄音沸手,去河邊找鬼。 笑死注簿,一個胖子當(dāng)著我的面吹牛契吉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诡渴,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼捐晶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妄辩?” 一聲冷哼從身側(cè)響起惑灵,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎眼耀,沒想到半個月后英支,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哮伟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年潭辈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澈吨。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寄摆,靈堂內(nèi)的尸體忽然破棺而出谅辣,到底是詐尸還是另有隱情,我是刑警寧澤婶恼,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布桑阶,位于F島的核電站柏副,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蚣录。R本人自食惡果不足惜割择,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萎河。 院中可真熱鬧荔泳,春花似錦、人聲如沸虐杯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽擎椰。三九已至支子,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間达舒,已是汗流浹背值朋。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巩搏,地道東北人昨登。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像塔猾,于是被迫代替她去往敵國和親篙骡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,823評論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理丈甸,服務(wù)發(fā)現(xiàn)糯俗,斷路器,智...
    卡卡羅2017閱讀 134,661評論 18 139
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項(xiàng)睦擂,請點(diǎn)擊這里進(jìn)行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,138評論 8 72
  • 要在投資世界中生存下去得湘,就要有判斷趨勢的能力。真正的趨勢往往都包含著一個或多個周期顿仇,每個周期都會有波動淘正。只有真正經(jīng)...
    丘峻閱讀 342評論 0 2