gradle命令及技巧

在過(guò)去一年左右,我開(kāi)始使用Gradle作為我構(gòu)建基于JVM項(xiàng)目的主要工具进副。 在使用Gradle之前影斑,我是一個(gè)Apache Maven用戶矫户。 Gradle分別從Apache Maven和Apache Ant中汲取了優(yōu)點(diǎn)皆辽。 Gradle從Ant中獲取了靈活的特性驱闷,從Maven得到了配置空另,依賴關(guān)系管理和插件的基本規(guī)范痹换。 Gradle和Ant一樣娇豫,將任務(wù)作為一等公民對(duì)待氮昧。

Gradle構(gòu)建有三個(gè)不同的階段 - 初始化袖肥,配置和執(zhí)行椎组。 初始化階段用來(lái)確定所有將參與構(gòu)建過(guò)程的項(xiàng)目寸癌,并為每個(gè)項(xiàng)目創(chuàng)建一個(gè)Project實(shí)例蒸苇。 在配置階段溪烤,它會(huì)執(zhí)行所有參與構(gòu)建過(guò)程的項(xiàng)目的構(gòu)建腳本檬嘀。 最后枪眉,在執(zhí)行階段贸铜,所有在配置階段配置好的任務(wù)都會(huì)被執(zhí)行蒿秦。

在本文中棍鳖,我將列出我在過(guò)去一年左右學(xué)到的小技巧镜悉。

Contributing to Gradle tips

如果你看到錯(cuò)誤或者可以做得更好的地方也請(qǐng)貢獻(xiàn)你的一份力量侣肄!提個(gè)issue或是提交pull request給我都是可以的稼锅。歡迎各種貢獻(xiàn),包括更正锥债,添加哮肚,改進(jìn)和翻譯。

Tip 1: 使用Gradle Wrapper

當(dāng)我開(kāi)始使用Gradle艇潭,其中一個(gè)功能——對(duì)包裝腳本的支持使我印象深刻蹋凝。 Gradle的wrapper將自己包含在項(xiàng)目中,獨(dú)立于構(gòu)建工具的安裝情龄。 它允許您以零配置方式用Gradle構(gòu)建項(xiàng)目(無(wú)需先安裝Gradle distribution)鞍爱。 這將確保每個(gè)人都使用相同版本的構(gòu)建工具睹逃。

要為項(xiàng)目創(chuàng)建Gradle wrapper腳本沉填,可以運(yùn)行以下命令:

$ gradle wrapper --gradle-version 2.14.1

你需要安裝Gradle到你的電腦上以運(yùn)行以上的命令(譯者注:可能還要加環(huán)境變量)斑鼻。如果你用的是Mac卵沉,你可以用brew安裝gradle史汗。

這將在你的工程里生成少許文件gradlew、gradlew.bat戈毒、 gradle/wrapper/gradle-wrapper.jar和gradle/wrapper/gradle-wrapper.properties埋市。

確保沒(méi)有在版本控制工具中忽略gradle-wrapper.jar文件。默認(rèn)情況下版本控制會(huì)忽略.jar文件

在任何時(shí)候污茵,如果你想升級(jí)Gradle版本只是重新生成Gradle wrapper腳本傳遞它要使用的Gradle版本。 假設(shè)我們要升級(jí)到Gradle 3.0-milestone-2襟士,再次運(yùn)行如下命令:

$ gradle wrapper --gradle-version 3.0-milestone-2

還有敌蜂,為./gradlew設(shè)置一個(gè)別名也是個(gè)好主意

alias gradle="./gradlew"

Tip 2: 查看依賴圖表

要查看項(xiàng)目的依賴關(guān)系圖,您可以運(yùn)行以下命令:

$ gradle dependencies

Tip 3: 構(gòu)建單獨(dú)的工程

Gradle同時(shí)支持單一項(xiàng)目構(gòu)建和多項(xiàng)目構(gòu)建。我們假設(shè)我們的多項(xiàng)目結(jié)構(gòu)如下所示:

app

? api

? ? model

? ? rest

? core

? web

? itests

只構(gòu)建rest工程我們可以運(yùn)行以下命令

$ gradle api:rest:build

Tip 4: 排除某些任務(wù)

你可以用-x選項(xiàng)去排除一個(gè)任務(wù)秸脱。假設(shè)我們希望跳過(guò)測(cè)試我們可以用以下的命令:

$ gradle clean build -x test

Tip 5: 分析你的構(gòu)建

Gradle內(nèi)置了對(duì)分析的支持落包。 如果您遇到性能問(wèn)題,應(yīng)該使用--profile選項(xiàng)來(lái)生成配置文件報(bào)告摊唇。 報(bào)告 會(huì)顯示不同任務(wù)花費(fèi)的時(shí)間咐蝇。 假設(shè)我們想要分析構(gòu)建任務(wù),然后我們可以運(yùn)行以下命令:

$ gradle --profile build

這將在目錄build/reports/profile下生成報(bào)告巷查。

gradle-profilegradle-profile

Tip 6: Perform dry run

有時(shí)你想要查看所有在編譯中將被執(zhí)行的所有任務(wù)擔(dān)憂不想執(zhí)行它們有序。這個(gè)場(chǎng)景下Gradle提供``--dry-run```命令:

$ gradle build --dry-run

Tip 7: 安置項(xiàng)目jar包到本地Maven倉(cāng)庫(kù)

$ gradle install

Tip 8:查看Gradle任務(wù)

$ gradle tasks

這個(gè)命令并不會(huì)列出所有任務(wù)。要用--all來(lái)運(yùn)行:

$ gradle tasks --all

Tip 9: 使用Gradle守護(hù)程序(Daemon)

加快Gradle構(gòu)建的最簡(jiǎn)單辦法就是用Gradle守護(hù)進(jìn)程進(jìn)行構(gòu)建旭寿。Gradle守護(hù)進(jìn)程是一個(gè)長(zhǎng)時(shí)間存活的后臺(tái)進(jìn)程缩膝,在其生命周期內(nèi)只執(zhí)行一次引導(dǎo)痛黎。 默認(rèn)情況下未啟用Gradle守護(hù)程序皇筛。 要使用Gradle守護(hù)進(jìn)程拄踪,您可以在構(gòu)建命令中使用--daemon標(biāo)志贿衍。

$ gradle build --daemon

它將在3.0版本默認(rèn)開(kāi)啟

每次傳遞--daemon標(biāo)志都很麻煩擎淤,因此您可以通過(guò)在開(kāi)發(fā)機(jī)器上的~/.gradle/gradle.properties文件中添加此標(biāo)志來(lái)啟用它弊攘。

org.gradle.daemon=true

Tip 10: 多線程構(gòu)建

打開(kāi)~/.gradle/gradle.properties并添加以下行捣域。

org.gradle.parallel=true

Tip 11: 自定義Gradle任務(wù)

您可以通過(guò)覆蓋其doFirst和doLast生命周期方法來(lái)自定義任何Gradle任務(wù)贞言。 讓我們假設(shè)我們想在執(zhí)行測(cè)試之前和之后添加打印語(yǔ)句义钉,我們可以通過(guò)以下操作:

apply plugin:'java'

test.doFirst {

? ? println("running tests...")

}

test.doLast {

? ? println("done executing tests...")

}

Tip 12: 為Gradle守護(hù)進(jìn)程提供JVM參數(shù)

您可以通過(guò)在~/.gradle/gradle.properties中輸入一行來(lái)為Gradle守護(hù)程序指定JVM參數(shù)斩启,如下所示:

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Tip 13: 用離線模式運(yùn)行

$ gradle build --offline

Tip 14: 按需配置

按需配置是Gradle的孵化功能,因此默認(rèn)情況下不啟用坯认。

$ gradle clean build --configure-on-demand

如果您希望將其設(shè)置為默認(rèn)選項(xiàng)引润,則可以通過(guò)向~/.gradle/gradle.properties中添加以下代碼為全局提供此選項(xiàng)

org.gradle.configureondemand=true

Tip 15: 刷新Gradle依賴緩存

$ gradle clean build --refresh-dependencies

你也可以手動(dòng)刪除 ~/.gradle/caches.。下一次你構(gòu)建的時(shí)候它會(huì)下載所有依賴并加入到緩存中。

假設(shè)你在Gradle中用于放置jar文件的目錄為lib浇雹。

dependencies {

? ? compile files('libs/myjar.jar')

}

也能像下面這樣做:

repositories {

? flatDir {

? ? ? dirs 'libs'

? }

}

dependencies {

? compile name: 'myjar'

}

Tip 17: 將本地目錄中的所有jar加入依賴

如果你需要把一個(gè)目錄下的所有l(wèi)ibs加入依賴,那你就可以像下面這樣做:

dependencies {

? ? compile fileTree(dir: 'libs', include: ['*.jar'])

}

Tip 18: 構(gòu)建項(xiàng)目和所有它所依賴的項(xiàng)目

$ gradle api:model:buildNeeded

Tip 19: 構(gòu)建項(xiàng)目和所有依賴它的

$ gradle api:rest:buildDependents

Tip 20: 為構(gòu)建腳本提供默認(rèn)任務(wù)

為項(xiàng)目定義默認(rèn)任務(wù)是一個(gè)很好的做法怀跛,以便初次使用者可以輕松開(kāi)始您的項(xiàng)目戒祠。 在您的Gradle腳本中矾芙,定義defaultTasks變量來(lái)傳遞它應(yīng)該執(zhí)行的任務(wù)。

defaultTasks "clean","build"

現(xiàn)在如果一個(gè)用戶運(yùn)行g(shù)radle命令烈疚,默認(rèn)任務(wù)將被執(zhí)行

Tip 21: 創(chuàng)建文件的校驗(yàn)和

apply plugin: 'java'

archivesBaseName = 'checksum-sample'

jar.doLast { task ->

? ? ant.checksum file: task.archivePath

}

Tip 22: 給構(gòu)建文件取不同的名字

默認(rèn)的文件名為 build.gradle。你可以在settings.gradle用以下方法進(jìn)行重命名:

rootProject.buildFileName = "gradle-tips.gradle"

現(xiàn)在把你的build.gradle改名成了gradle-tips.gradle

Tip 23: 在多項(xiàng)目Gradle工程中為構(gòu)建腳本取不同的名字

為了方便,我們用build.gradle作為Gradle構(gòu)建腳本的名稱。當(dāng)你在多項(xiàng)目Gradle工程中厕鹃,對(duì)構(gòu)建腳本使用不同的名稱是有意義的。 我們假設(shè)我們的多模塊項(xiàng)目如下所示:

app

? api

? core

? web

? itests

默認(rèn)情況下,所有這些子項(xiàng)目都將build.gradle作為他們的Gradle構(gòu)建文件。 我們可以通過(guò)在settings.gradle中改變。

rootProject.children.each {

? ? it.buildFileName = it.name + '.gradle'

}

現(xiàn)在你可以用build.gradle作為根項(xiàng)目的構(gòu)建文件而子工程中為api.gradle, core.gradle, web.gradle, 和itests.gradle。

Tip 24: 使用Gradle可視化界面

你可以在命令行中用以下代碼啟動(dòng)Gradle可視化界面:

$ gradle --gui

它將開(kāi)啟下圖所示的可視化界面:

gradle-guigradle-gui

Tip 25: 創(chuàng)建untar任務(wù)

task untar( type : Copy) {

? from tarTree(‘dist.tar.gz’)

? into ‘destFolder’

}

Tip 26: 版本沖突時(shí)的配置

在你的構(gòu)建腳本中叹话,定義了一個(gè)如下的配置塊:

configurations {

? compile.resolutionStrategy.failOnVersionConflict()

}

Tip 27: 在Gradle中使用作用域

你可以用gradle2.12版本以上提供的compileOnly作用域來(lái)使用Maven

dependencies {

? ? compileOnly 'javax.servlet:servlet-api:3.0-alpha-1'

}

Tip 28: 顯式設(shè)置Java編譯編碼

在你的 build.gradle中添加如下代碼:

compileJava.options.encoding = 'UTF-8'

Tip 29: 禁用傳遞依賴關(guān)系解析

為整個(gè)配置關(guān)閉傳遞依賴關(guān)系:

configurations {

? compile.transitive = false

}

Tip 30: 查看Gradle版本

用下列代碼查看Gradle版本:

$ gradle -v

------------------------------------------------------------

Gradle 2.14.1

------------------------------------------------------------

Build time:? 2016-07-18 06:38:37 UTC

Revision:? ? d9e2113d9fb05a5caabba61798bdb8dfdca83719

Groovy:? ? ? 2.4.4

Ant:? ? ? ? ? Apache Ant(TM) version 1.9.6 compiled on June 29 2015

JVM:? ? ? ? ? 1.8.0_60 (Oracle Corporation 25.60-b23)

OS:? ? ? ? ? Mac OS X 10.10.5 x86_64

你可以用GradleVersion.current()查看當(dāng)前Gradle版本旺隙。 你可以創(chuàng)建一個(gè)任務(wù)來(lái)做這個(gè)工作:

task gradleVersion {

? ? group = "help"

? ? description = "Prints Gradle version"

? ? doLast {

? ? ? ? logger.quiet("You are using [${GradleVersion.current()}]")

? ? }

}

當(dāng)你運(yùn)行時(shí)你會(huì)看到:

$ gradle gradleVersion

:gradleVersion

You are using [Gradle 2.14.1]

BUILD SUCCESSFUL

Total time: 0.667 secs

Tip 31: 禁用一個(gè)任務(wù)

taskName.enabled = false

如果你想禁用測(cè)試任務(wù),用下列代碼:

test.enabled = false

Tip 32: 初始化Gradle項(xiàng)目

要?jiǎng)?chuàng)建使用testng測(cè)試框架的Java Gradle項(xiàng)目喉镰,您可以使用以下命令:

$ gradle init --type java-library --test-framework testng

如果你想用JUnit柱蟀,那就別加上--test-framework

$ gradle init --type java-library

你也可以創(chuàng)建groovy和scala項(xiàng)目

$ gradle init --type scala-library

$ gradle init --type groovy-library

Tip 33: 簽名文件

apply plugin: 'signing'

signing {

? ? sign configurations.archives

}

如果你只想在發(fā)布的版本中簽名而在快照版本中不簽名术瓮,那你可以這樣做:

apply plugin: 'signing'

signing {

? ? required { !version.endsWith("SNAPSHOT”) }

}

Tip 34: 并行運(yùn)行測(cè)試

test {

? maxParallelForks = 2

}

Tip 35: 為測(cè)試設(shè)置內(nèi)存

test {

? ? minHeapSize = ‘512m'

? ? maxHeapSize = ‘1024m'

? }

Tip 36: 用任務(wù)的短名

如果你有個(gè)任務(wù)buildServerDistribution,想用它的短名,你可以用如下方法:

$ gradle bSD

你必須保證它在所有任務(wù)中是唯一的料皇,如有另一個(gè)任務(wù)buildSafeDistribution演怎,你需要做以下區(qū)分

$ gradle bSeD

Tip 37: 查看Gradle任務(wù)的相關(guān)信息

$ gradle help --task <task name>

$ gradle help --task dependencies

Tip 38: 用調(diào)試模式運(yùn)行Gradle

$ gradle clean build --debug

Tip 39: 當(dāng)任務(wù)失敗后繼續(xù)執(zhí)行任務(wù)

$ gradle clean build --continue

Tip 40: 將Maven工程轉(zhuǎn)移至Gradle

到Maven項(xiàng)目中運(yùn)行以下命令:

$ gradle init --type pom

Tip 41: 強(qiáng)制Gradle重運(yùn)行即使它是最新的

$ gradle build --rerun-tasks

Tip 42: 在依賴中使用確切的版本號(hào)

你在聲明依賴時(shí)不要使用+號(hào)歉眷,而該用確切的版本號(hào),這回讓你構(gòu)建過(guò)程更快更安全

Tip 43: 啟用連續(xù)構(gòu)建

如果你希望連續(xù)地運(yùn)行構(gòu)建颤枪,那你可以使用--continuous標(biāo)識(shí)汗捡。它將查找文件改變,找到一處九江重新運(yùn)行命令,用下列方法啟用連續(xù)測(cè)試:

$ gradle test --continuous

Tip 44: 運(yùn)行一個(gè)測(cè)試事務(wù)

有時(shí)我們只需要運(yùn)行一個(gè)測(cè)試事務(wù)而不是運(yùn)行所有測(cè)試扇住。用下列命令即可:

$ gradle test --tests tips.CalculatorTest

想運(yùn)行CalculatorTest 中的某個(gè)部分可以這樣做:

$ gradle test --tests tips.CalculatorTest.shouldAddTwoNumbers

您還可以使用正則表達(dá)式來(lái)指定多個(gè)測(cè)試:

$ gradle test --tests "tips.Calculator*Test"

你也可以多次用--test標(biāo)識(shí)

$ gradle test --tests tips.CalculatorTest --tests tips.Calculator1Test

在一個(gè)子模塊的測(cè)試中你可以這樣做:

$ gradle api:test --tests app.api.PingResourceTest

Tip 45: 生成源文件和java文檔jar包

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, javadocJar

}

Tip 46: 在構(gòu)建腳本中訪問(wèn)環(huán)境變量

你可以用很多方法在構(gòu)建腳本中訪問(wèn)環(huán)境變量:

println(System.getenv("HOME"))

println("$System.env.HOME")

Tip 47: 配置測(cè)試日志

Gradle默認(rèn)只會(huì)在控制臺(tái)打印測(cè)試錯(cuò)誤的日志春缕。這會(huì)限制任務(wù)如何運(yùn)行的可見(jiàn)性。Gradle允許你用testLogging參數(shù)來(lái)配置它艘蹋。打印所有日志如下锄贼。更多信息看這里.

test {

? ? testLogging {

? ? ? ? events "passed", "skipped", "failed"

? ? }

}

現(xiàn)在當(dāng)你運(yùn)行./gradlew clean build時(shí),你也會(huì)看到通過(guò)測(cè)試的日志了女阀。

$ gradle clean test

:clean

:compileJava

:processResources UP-TO-DATE

:classes

:compileTestJava

:processTestResources UP-TO-DATE

:testClasses

:test

tips.CalculatorTest > shouldSubtractTwoNumbers PASSED

tips.CalculatorTest > shouldAddTwoNumbers PASSED

tips.CalculatorTest > shouldSubtractTwoNumbers1 PASSED

有一點(diǎn)要記住的是宅荤,Gradle測(cè)試命令只有當(dāng)改變時(shí)才會(huì)執(zhí)行。因此如果你在沒(méi)有改動(dòng)的情況下再次執(zhí)行它將不會(huì)有任何結(jié)果產(chǎn)生浸策。你將看到:test UP-TO-DATE 冯键,這意味著沒(méi)有檢測(cè)到改動(dòng)。你可以用./gradlew cleanTest test指令強(qiáng)制Gradle每次都運(yùn)行測(cè)試庸汗。

Tip 48: 在測(cè)試執(zhí)行期間顯示標(biāo)準(zhǔn)輸出和錯(cuò)誤流

test {

? ? testLogging {

? ? ? ? events "passed", "skipped", "failed"

? ? ? ? showStandardStreams = true

? ? }

}

Tip 49: 存儲(chǔ)憑據(jù)

您不應(yīng)該在build.gradle中硬編碼憑據(jù)惫确,而應(yīng)該依靠您的用戶home~/ .gradle / gradle.properties來(lái)存儲(chǔ)憑據(jù)。 假設(shè)你想使用受憑證保護(hù)的Maven存儲(chǔ)庫(kù)蚯舱。 指定憑據(jù)的一種方法是在build.gradle中對(duì)它們進(jìn)行硬編碼改化,如下所示。

repositories {

? ? maven {

? ? ? ? credentials {

? ? ? ? ? ? username "admin"

? ? ? ? ? ? password "admin123"

? ? ? ? }

? ? ? ? url "http://nexus.mycompany.com/"

? ? }

}

更好的方法是改變你自己的~/ .gradle / gradle.properties

nexusUsername = admin

nexusPassword = admin123

現(xiàn)在枉昏,在build.gradle中引用這個(gè)

repositories {

? ? maven {

? ? ? ? credentials {

? ? ? ? ? ? username "$nexusUsername"

? ? ? ? ? ? password "$nexusPassword"

? ? ? ? }

? ? ? ? url "http://nexus.mycompany.com/"

? ? }

}

Tip 50: 調(diào)試Java可執(zhí)行應(yīng)用程序

如果將應(yīng)用程序打包成可以通過(guò)Gradle運(yùn)行的可執(zhí)行jar陈肛,那么可以通過(guò)--debug-jvm選項(xiàng)來(lái)調(diào)試它。 Spring Boot應(yīng)用程序作為可執(zhí)行jar運(yùn)行兄裂。 您可以使用gradle bootRun來(lái)運(yùn)行應(yīng)用程序句旱。 要在端口5005上調(diào)試應(yīng)用程序,您可以在調(diào)試模式下啟動(dòng)應(yīng)用程序懦窘。

$ gdw <taskname> --debug-jvm

$ gradle bootRun --debug-jvm

Tip 51: 使用本地Maven倉(cāng)庫(kù)

要用本地 ~/.m2 倉(cāng)庫(kù),你需要在build.gradle中添加這些:

repositories {

? ? mavenLocal()

}

Tip 52: 排除傳遞性的依賴

用下述方法排除傳遞性的依賴

compile('org.hibernate:hibernate:3.1') {

? exclude module: 'cglib' //by artifact name

? exclude group: 'org.jmock' //by group

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末前翎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子畅涂,更是在濱河造成了極大的恐慌港华,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件午衰,死亡現(xiàn)場(chǎng)離奇詭異立宜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)臊岸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門橙数,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人帅戒,你說(shuō)我怎么就攤上這事灯帮⊙录迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵钟哥,是天一觀的道長(zhǎng)迎献。 經(jīng)常有香客問(wèn)我,道長(zhǎng)腻贰,這世上最難降的妖魔是什么吁恍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮播演,結(jié)果婚禮上冀瓦,老公的妹妹穿的比我還像新娘。我一直安慰自己写烤,他們只是感情好翼闽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著顶霞,像睡著了一般肄程。 火紅的嫁衣襯著肌膚如雪锣吼。 梳的紋絲不亂的頭發(fā)上选浑,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音玄叠,去河邊找鬼古徒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛读恃,可吹牛的內(nèi)容都是我干的隧膘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼寺惫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼疹吃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起西雀,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤萨驶,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后艇肴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體腔呜,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年再悼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了核畴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冲九,死狀恐怖谤草,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤丑孩,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布泳炉,位于F島的核電站,受9級(jí)特大地震影響嚎杨,放射性物質(zhì)發(fā)生泄漏花鹅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一枫浙、第九天 我趴在偏房一處隱蔽的房頂上張望刨肃。 院中可真熱鬧,春花似錦箩帚、人聲如沸真友。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盔然。三九已至,卻和暖如春是嗜,著一層夾襖步出監(jiān)牢的瞬間愈案,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工鹅搪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留站绪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓丽柿,卻偏偏與公主長(zhǎng)得像恢准,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子甫题,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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

  • 原文鏈接:這里翻譯幫助:谷歌翻譯 Gradle Tips 在過(guò)去一年左右馁筐,我開(kāi)始使用Gradle作為我構(gòu)建基于JV...
    小呀么小黃雞閱讀 7,493評(píng)論 0 37
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,822評(píng)論 6 342
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)坠非,斷路器敏沉,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 說(shuō)明 本文主要介紹和Gradle關(guān)系密切、相對(duì)不容易理解的配置麻顶,偏重概念介紹赦抖。部分內(nèi)容是Android特有的(例如...
    jzj1993閱讀 15,631評(píng)論 1 62
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項(xiàng),請(qǐng)點(diǎn)擊這里進(jìn)行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,135評(píng)論 8 72