<NO.4>自從用了Android Studio总滩,Gradle是必須學(xué)了...

在創(chuàng)建了一個實用的應(yīng)用程序之后,我們可能想將其與他人分享幸逆。其中一種方式就是創(chuàng)建一個可以從網(wǎng)站上下載的二進制文件棍辕。

這篇教程描述了如何創(chuàng)建一個二進制發(fā)布版本,滿足以下需求:

二進制發(fā)布一定不能使用所謂的“fat jar”方式还绘。換句話說楚昭,我們應(yīng)用程序中的所有依賴一定不能被打包到該程序相同的jar包中。

二進制發(fā)布必須包含針對*nix和Windows操作系統(tǒng)的啟動副本拍顷。

二進制發(fā)布的根目錄必須包含許可證抚太。

我們開始吧。

創(chuàng)建二進制發(fā)布文件

Application插件是一種Gradle插件昔案,讓我們可以運行尿贫、安裝應(yīng)用程序并用非“fat jar”方式創(chuàng)建二進制發(fā)布版本。

還記得我們在上篇教程中提到的一個例子嗎踏揣?在它的build.gradle文件中做一些相應(yīng)的更改庆亡,就可以進行二進制發(fā)布了。

移除jar任務(wù)的配置捞稿。

為項目應(yīng)用application插件又谋。

對應(yīng)用程序的主類進行配置拼缝,設(shè)置mainClassName屬性。

在build.gradle文件中作出以上更改后彰亥,結(jié)果如下(相關(guān)部分已經(jīng)高亮):

apply plugin: 'application'

apply plugin: 'java'

repositories {

mavenCentral()

}

dependencies {

compile 'log4j:log4j:1.2.17'

testCompile 'junit:junit:4.11'

}

mainClassName = 'net.petrikainulainen.gradle.HelloWorld'

Application插件在項目中添加了5個任務(wù):

run任務(wù)用以啟動應(yīng)用程序咧七。

startScripts任務(wù)會在build/scripts目錄中創(chuàng)建啟動腳本,這個任務(wù)所創(chuàng)建的啟動腳本適用于Windows和*nix操作系統(tǒng)剩愧。

installApp任務(wù)會在build/install/[project name]目錄中安裝應(yīng)用程序猪叙。

distZip任務(wù)用以創(chuàng)建二進制發(fā)布并將其打包為一個zip文件娇斩∪示恚可以在build/distributions目錄下找到。

distTar任務(wù)用以創(chuàng)建二進制發(fā)布并將其打包為一個tar文件犬第〗趸可以在build/distributions目錄下找到。

我們可以通過在項目根目錄下運行以下命令:gradle distZip或gradle distTar 創(chuàng)建二進制文件歉嗓。假設(shè)我們創(chuàng)建了一個打包為zip文件的二進制文件丰介,輸出如下:

> gradle distZip

:compileJava

:processResources

:classes

:jar

:startScripts

:distZip

BUILD SUCCESSFUL

Total time: 4.679 secs

如果將application插件創(chuàng)建的二進制文件解壓縮,可以得到以下目錄結(jié)構(gòu):

bin目錄:包括啟動腳本鉴分。

lib目錄:包括應(yīng)用程序的jar文件以及它的依賴哮幢。

你可以閱讀Gradle Application插件用戶指南(第45章)了解更多關(guān)于Application插件信息。

現(xiàn)在志珍,我們可以創(chuàng)建一個幾乎能滿足所有需求的二進制發(fā)布了橙垢。不過,我們?nèi)匀恍枰谖覀兌M制發(fā)布的根目錄下添加應(yīng)用程序的許可證伦糯。下面我就來看一下柜某,如何做到這一點。

在二進制發(fā)布版本中添加應(yīng)用程序許可證

我們可以通過以下步驟敛纲,在二進制發(fā)布中添加應(yīng)用程序許可證:

創(chuàng)建一個任務(wù)喂击,將許可證從項目的根目錄復(fù)制到build目錄下。

將許可證加入到所創(chuàng)建的二進制發(fā)布的根目錄下淤翔。

我們來仔細(xì)看一下這些步驟的詳情翰绊。

將許可證文件復(fù)制到build目錄下

LICENSE文件包含了我們應(yīng)用程序的許可信息,可以在項目的根目錄下找到它旁壮。

可以通過以下步驟將許可證文件復(fù)制到build目錄下:

創(chuàng)建一個新的Copy任務(wù)监嗜,名為copyLicense。

使用CopySpec接口中的from()方法配置源文件寡具,將“LICENSE”作為參數(shù)調(diào)用秤茅。

使用CopySpec接口中into()方法配置target目錄,將$buildDir屬性作為參數(shù)調(diào)用童叠。

在完成這些步驟以后框喳,build.gradle文件如下(相關(guān)部分已高亮):

apply plugin: 'application'

apply plugin: 'java'

repositories {

mavenCentral()

}

dependencies {

compile 'log4j:log4j:1.2.17'

testCompile 'junit:junit:4.11'

}

mainClassName = 'net.petrikainulainen.gradle.HelloWorld'

task copyLicense(type: Copy) {

from "LICENSE"

into "$buildDir"

}

現(xiàn)在课幕,我們已經(jīng)創(chuàng)建了一個任務(wù),將LICENSE文件從項目的根目錄復(fù)制到build目錄下五垮。然而乍惊,當(dāng)我們在項目根目錄下運行命令:gradle distZip,會看到以下輸出:

> gradle distZip

:compileJava

:processResources

:classes

:jar

:startScripts

:distZip

BUILD SUCCESSFUL

Total time: 4.679 secs

換句話說放仗,我們新的任務(wù)還沒有被引入润绎。所以理所當(dāng)然的,二進制發(fā)布中也沒有包含許可證诞挨。讓我們來修復(fù)這個問題莉撇。

將許可證文件加入到二進制發(fā)布文件中

我們可以通過以下步驟將許可證文件加入到二進制發(fā)布文件中:

將copyLicense任務(wù)從一個Copy任務(wù)改為正常的Gradle任務(wù),只需在它的聲明中移除“(type: Copy)”字符串惶傻。

按照以下步驟修改copyLicense任務(wù)

配置copyLicense任務(wù)輸出棍郎。創(chuàng)建一個新的文件對象,指向build目錄的許可證文件银室,并將其設(shè)置為outputs.file屬性值涂佃。

將許可證文件從項目的根目錄復(fù)制到build目錄下斟赚。

Application插件在項目中設(shè)置了一個CopySpec屬性闲先,名為applicationDistribution。我們可以使用這個屬性在已創(chuàng)建的二進制文件中加入許可證文件政冻,步驟如下:

使用CopySpec接口中的from()方法配置許可證文件的位置抓狭,將copyLicense任務(wù)的輸出作為方法參數(shù)伯病。

使用CopySpec接口中into()方法配置target目錄,將一個空的字符串作為參數(shù)調(diào)用方法辐宾。

在實現(xiàn)了這些步驟以后狱从,build.gradle文件如下(相關(guān)部分已高亮):

apply plugin: 'application'

apply plugin: 'java'

repositories {

mavenCentral()

}

dependencies {

compile 'log4j:log4j:1.2.17'

testCompile 'junit:junit:4.11'

}

mainClassName = 'net.petrikainulainen.gradle.HelloWorld'

task copyLicense {

outputs.file new File("$buildDir/LICENSE")

doLast {

copy {

from "LICENSE"

into "$buildDir"

}

}

}

applicationDistribution.from(copyLicense) {

into ""

}

在項目根目錄下運行命令gradle distZip時,會看到以下輸出:

> gradle distZip

:copyLicense

:compileJava

:processResources

:classes

:jar

:startScripts

:distZip

BUILD SUCCESSFUL

Total time: 5.594 secs

可以看到叠纹,copyLicense任務(wù)現(xiàn)在已經(jīng)被引入了季研。我們可以對二進制文件解壓縮,在根目錄下就能發(fā)現(xiàn)LICENSE文件了誉察。

最后与涡,我們對這篇教程中所學(xué)到的東西進行總結(jié)。

總結(jié)

這篇教程為我們教授了三方面內(nèi)容:

學(xué)會使用application插件創(chuàng)建一個二進制發(fā)布持偏。

學(xué)會使用Copy任務(wù)將一個文件從源目錄復(fù)制到目標(biāo)目錄驼卖。

學(xué)會如果將文件加入到由Application插件創(chuàng)建的二進制發(fā)布文件中。

如果你想運行本教程中的示例程序鸿秆,請從Github中獲取酌畜。

https://github.com/pkainulainen/gradle-examples/tree/master/runnable-binary-distribution

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市卿叽,隨后出現(xiàn)的幾起案子桥胞,更是在濱河造成了極大的恐慌恳守,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贩虾,死亡現(xiàn)場離奇詭異催烘,居然都是意外死亡,警方通過查閱死者的電腦和手機缎罢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門伊群,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人策精,你說我怎么就攤上這事舰始。” “怎么了蛮寂?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵蔽午,是天一觀的道長易茬。 經(jīng)常有香客問我酬蹋,道長,這世上最難降的妖魔是什么抽莱? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任范抓,我火速辦了婚禮,結(jié)果婚禮上食铐,老公的妹妹穿的比我還像新娘匕垫。我一直安慰自己,他們只是感情好虐呻,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布象泵。 她就那樣靜靜地躺著,像睡著了一般斟叼。 火紅的嫁衣襯著肌膚如雪偶惠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天朗涩,我揣著相機與錄音忽孽,去河邊找鬼。 笑死谢床,一個胖子當(dāng)著我的面吹牛兄一,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播识腿,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼出革,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了渡讼?” 一聲冷哼從身側(cè)響起骂束,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤费薄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后栖雾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體楞抡,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年析藕,在試婚紗的時候發(fā)現(xiàn)自己被綠了召廷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡账胧,死狀恐怖竞慢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情治泥,我是刑警寧澤筹煮,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站居夹,受9級特大地震影響败潦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜准脂,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一劫扒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狸膏,春花似錦沟饥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至砾脑,卻和暖如春幼驶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拦止。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工县遣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汹族。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓萧求,卻偏偏與公主長得像,于是被迫代替她去往敵國和親顶瞒。 傳聞我的和親對象是個殘疾皇子夸政,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

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