全網(wǎng)首套, 手把手教你學(xué)會(huì)gradle

Gradle是地表最強(qiáng)的自動(dòng)化構(gòu)建系統(tǒng)
綜合效率是maven的100倍
Kotlin又是最好用的jvm平臺(tái)的編程語(yǔ)言
他們?cè)谝黄饡?huì)發(fā)生什么樣的故事呢?
本課程是國(guó)內(nèi)全網(wǎng)第一套基于kotlin語(yǔ)法講解的gradle教程盼砍。
Kotlin強(qiáng)大的靜態(tài)語(yǔ)言特性, 讓你可以脫離文檔直接編寫gradle腳本
無(wú)論你是安卓程序員還是JavaEE程序員都有必要學(xué)習(xí)一下這門課程.

第1節(jié) gradle入門

1.1 gradle配置

下載gradle:https://gradle.org/install/

解壓弦赖,bin目錄配置到path環(huán)境變量

1.2 創(chuàng)建gradle工程

idea創(chuàng)建gradle工程秽荤,選擇java工程

輸入包名骑科、項(xiàng)目名稱

Paste_Image.png

1.3配置本地gradle

gradle-wrapper.properties配置本地gradle
build.gradle重命名后綴添加.kts(可以使用kotlin編寫gradle腳本)
一定要記得, 重啟idea配置生效

1.4 gradle入門編程

編寫gradle.gradle.kts

plugins { application }
application {    mainClassName="Main"}

Main.java類代碼

public class Main {
    public static void main(String[] args) {
        System.out.println("hello");
    }
}

運(yùn)行:點(diǎn)擊右邊tasks/application/run,運(yùn)行,輸出hello

1.5沒(méi)有src目錄問(wèn)題解決

官方文檔
https://intellij-support.jetbrains.com/hc/en-us/community/posts/206806425-Source-Directories-Not-Being-Created-In-New-Project

1.6 application/run沒(méi)有看到輸出結(jié)果問(wèn)題的解決

第2節(jié) Kotlin與Java共存

gradle與kotlin相見(jiàn)恨晚:https://blog.gradle.org/kotlin-meets-gradle

動(dòng)態(tài)語(yǔ)言:python、groovy旨别、JavaScript(運(yùn)行時(shí)才檢查錯(cuò)誤)
靜態(tài)語(yǔ)言:Kotlin英染、Java(編譯階段能發(fā)現(xiàn)錯(cuò)誤)

演示Java調(diào)用kotlin代碼

2.1 build.gradle.kts配置

gradle-wrapper.properties配置成本地gradle

plugins {
    application
    kotlin("jvm")
}
application{
    mainClassName="Test"
}
dependencies {
    compile(kotlin("stdlib"))
}
repositories{
    jcenter()
}

2.2 Kotlin代碼

class Girl(var name:String) {
    fun greeting(){
        println("你好揽惹,"+name)
    }
}

2.3 Java調(diào)用Kotlin

public class Test {
    public static void main(String[] args) {
        Girl girl = new Girl("劉菲菲");
        girl.greeting();
    }
}

第3節(jié) gradle的靈魂project和task

Gradle本身的領(lǐng)域?qū)ο笾饕蠵roject和Task。
Project位Task提供執(zhí)行的容器和上下文四康。

編寫自己的任務(wù)搪搏,build.gradle.kts代碼

task("hello",{
    println("hello, I am gradle")
})

第4節(jié) 任務(wù)的依賴

打開(kāi)冰箱門,才能放入大象闪金,然后關(guān)門

task("opendoor", {
})

task("putelephant", {
}).dependsOn("opendoor")

task("closedoor", {
}).dependsOn("putelephant")

//運(yùn)行關(guān)冰箱門疯溺,輸出結(jié)果

:opendoor UP-TO-DATE
:putelephant UP-TO-DATE
:closedoor UP-TO-DATE

第5節(jié) gradle任務(wù)的生命周期

gradle任務(wù)分為:掃描時(shí)執(zhí)行、運(yùn)行時(shí)執(zhí)行

5.1 掃描時(shí)執(zhí)行

執(zhí)行opendoor三個(gè)任務(wù)都執(zhí)行哎垦,因?yàn)槭菕呙钑r(shí)任務(wù)

task("opendoor", {
    println("打開(kāi)冰箱門")
})

task("putelephant", {
    println("放入大象")

}).dependsOn("opendoor")

task("closedoor", {
    println("關(guān)閉冰箱門")
}).dependsOn("putelephant")

5.2 運(yùn)行時(shí)執(zhí)行doFirst

task("opendoor", {
    doFirst { println("打開(kāi)冰箱門") }
})

task("putelephant", {
      doFirst {println("放入大象") }

}).dependsOn("opendoor")

task("closedoor", {
    doFirst { println("關(guān)閉冰箱門") }
}).dependsOn("putelephant")

5.3 總結(jié)掃描時(shí)運(yùn)行時(shí)

一般在掃描doFirst外部聲明變量喝检,內(nèi)部編寫任務(wù)

task("login",{
    val username = "heima"
    val password = "123"
    doFirst {
        if("heima" == username && "123" == password) println("登錄成功")
        else println("登錄失敗")
    }
})

第6節(jié) gradle任務(wù)集

任務(wù)的集合

tasks{
    "opendoor"{
        doFirst { println("打開(kāi)冰箱門") }
    }

    "putelephant"{
        doFirst { println("放入大象") }
    }.dependsOn("opendoor")

    "closedoor"{
        doFirst { println("關(guān)閉冰箱門") }
    }.dependsOn("putelephant")
}

第7節(jié) 默認(rèn)屬性

gradle默認(rèn)自帶一些屬性,比如構(gòu)建路徑撼泛,配置文件等待挠说,
打印gradle默認(rèn)配置信息

task("showConfig",{
    //project:默認(rèn)工程,properties是工程屬性Map集合
    project.properties.forEach { t, any ->
        println("key="+t+",value="+any)
    }
})

輸出結(jié)果:

第8節(jié) 默認(rèn)任務(wù)

控制臺(tái)輸入gradle執(zhí)行默認(rèn)任務(wù)愿题,不需要指定任務(wù)名稱

task("showConfig",{
    //project:默認(rèn)工程损俭,properties是工程屬性Map集合
    project.properties.forEach { t, any ->
        println("key="+t+",value="+any)
    }
})

//執(zhí)行默認(rèn)任務(wù)
defaultTasks("showConfig")

第9節(jié) 編寫gradle增量式更新任務(wù)

增量式更新:哪個(gè)文件改變蛙奖,才更新哪個(gè)
gradle增量式更新任務(wù)效率是maven的100倍

需求:遍歷src目錄下源代碼文件明,輸出到info.txt

9.1 不使用增量更新遍歷文件

build.gradle.kts代碼:
plugins { java }

task("showSrcDir",{
    //獲取遍歷src目錄下的文件
    val fileTree = fileTree("src")
    val infoFile = file("info.txt")
    infoFile.writeText("")//清空數(shù)據(jù)
    fileTree.forEach {
        if(it.isFile){
            //拼接杆兵,寫入文件
            Thread.sleep(1000)//為了演示增量更新效率
            infoFile.appendText(it.absolutePath+"\r\n")
        }
    }
})

9.2 使用增量式更新

inputs.dir()        //輸入目錄
inputs.file()       //輸入文件
outputs.dir()       //輸出目錄
outputs.file()  //輸出文件

沒(méi)有變化雁仲,執(zhí)行0秒

plugins { java }

task("showSrcDir",{
    //如果src目錄下內(nèi)容和info.txt沒(méi)有發(fā)生改變,任務(wù)不會(huì)執(zhí)行
    inputs.dir("src")   //輸入目錄
    outputs.file("info.txt")//輸出文件
    doFirst {
        //獲取遍歷src目錄下的文件
        val fileTree = fileTree("src")
        val infoFile = file("info.txt")
        infoFile.writeText("")//清空數(shù)據(jù)
        fileTree.forEach {
            if(it.isFile){
                //拼接琐脏,寫入文件
                Thread.sleep(1000)
                infoFile.appendText(it.absolutePath+"\r\n")
            }
        }
    }
})

修改src目錄下Java源代碼攒砖,重新執(zhí)行,2秒鐘

public class Student {
    //新增
    private String name = "heima";
}

第10節(jié) gradle常見(jiàn)插件application,java

application插件:可以編寫java工程日裙、kotlin工程

java插件:只能編寫java代碼

常用插件:https://docs.gradle.org/4.1/userguide/userguide.html
gradle所有插件:https://plugins.gradle.org/

//使用application插件
plugins { application }

//配置插件
application {
    //設(shè)置主函數(shù)
    mainClassName = "Girl"
}

第11節(jié) gradle依賴管理入門(普通程序員的開(kāi)發(fā)流程)

需求:使用http-client 3.1實(shí)現(xiàn)下載圖片功能
圖片路徑:http://img1.mm131.com/pic/946/1.jpg, …后面xxx/2.jpg依次類推

普通程序員一般百度http-client 3.1吹艇,然后下載jar包,

11.1下載http-client3.1jar包

下載地址:百度...
使用文檔:百度...

代碼:
//下載圖片
val httpClient = HttpClient()
val method = GetMethod("http://img1.mm131.com/pic/946/1.jpg")
httpClient.executeMethod(method)
val responseBody = method.getResponseBody();

//輸出文件
var file = File("1.jpg")
file.writeBytes(responseBody)

11.2 下載commons-logging.jar
上面代碼運(yùn)行報(bào)錯(cuò)

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.commons.httpclient.HttpClient.<clinit>(HttpClient.java:65)
at DownloaderKt.main(Downloader.kt:9)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 2 more

普通程序員百度昂拂,找到下載地址http://vdisk.weibo.com/s/z0am_ebTNl0Zp受神,下載添加到項(xiàng)目中

11.3 下載commons-codec.jar

上面代碼運(yùn)行報(bào)錯(cuò)

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException
at org.apache.commons.httpclient.HttpMethodBase.<init>(HttpMethodBase.java:217)
at org.apache.commons.httpclient.methods.GetMethod.<init>(GetMethod.java:88)
at DownloaderKt.main(Downloader.kt:9)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.codec.DecoderException
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 3 more

普通程序員百度,發(fā)現(xiàn)需要下載commons-codec.jar格侯,然后下載添加到項(xiàng)目中

最終下載完成15張圖片

//下載15張圖片圖片
val range = 1..15
for (i in range) {
    val httpClient = HttpClient()
    val method = GetMethod("http://img1.mm131.com/pic/946/${i}.jpg")
    httpClient.executeMethod(method)
        val responseBody = method.getResponseBody();
    method.releaseConnection();

        //輸出文件
    var file = File("${i}.jpg")
    file.writeBytes(responseBody)
}

第12節(jié) gradle依賴管理(高級(jí)程序員如何添加依賴)

高級(jí)程序員使用依賴管理鼻听,不需要手動(dòng)下載jar包。

12.1 http-client maven倉(cāng)庫(kù)

百度:http-client 3.1 maven联四,找到http-client的maven倉(cāng)庫(kù)撑碴,

12.2 build.gradle.kts配置

plugins{
    application
    kotlin("jvm")
}
apply {
    plugin("kotlin")
}

application {
    mainClassName = "DownloaderKt"
}
dependencies {
    compile(kotlin("stdlib"))
    compile("commons-httpclient","commons-httpclient","3.1")
}

 repositories {
    mavenCentral()
    jcenter()
}

12.3 kotlin代碼

//下載15張圖片圖片
val range = 1..15
for (i in range) {
    val httpClient = HttpClient()
    val method =
            GetMethod("http://img1.mm131.com/pic/946/${i}.jpg")
    httpClient.executeMethod(method)
    val responseBody = method.getResponseBody();
    method.releaseConnection();

    //輸出文件
    val file = File("${i}.jpg")
    file.writeBytes(responseBody)
}

12.4 run出現(xiàn)找不到主類問(wèn)題的解決

我的Kotlin文件名:Downloader.kt
build.gradle.kts配置運(yùn)行主類:Downloader
運(yùn)行報(bào)錯(cuò):找不到或無(wú)法加載主類 Downloader

解決:運(yùn)行kotlin主類,需要在類名后帶上Kt

application {    mainClassName = "DownloaderKt"}

第13節(jié) gradle依賴管理的類比

普通程序員百度查找解決方案朝墩,下載http-client.jar灰羽,錯(cuò)誤然后百度下載commons-logging.jar和commons-codec.jar,這種開(kāi)發(fā)效率很低鱼辙,而且有個(gè)jar包可能依賴很多個(gè)jar包
高級(jí)程序員通過(guò)依賴管理,只需一個(gè)依賴玫镐,其他相關(guān)commons-logging和commons-codec都會(huì)自定依賴到項(xiàng)目中倒戏,這就是gradle依賴管理的優(yōu)勢(shì)。

第14節(jié)

公共倉(cāng)庫(kù)和依賴配置階段

依賴管理:指在什么地方以什么形式引入外部代碼恐似。

14.1 常用2個(gè)公共倉(cāng)庫(kù)

公共倉(cāng)庫(kù):

maven center:http://mvnrepository.com/

jcenter:https://bintray.com/bintray/jcenter

14.2 測(cè)試時(shí)依賴

依賴分為兩種:

編譯時(shí)依賴:compile

測(cè)試時(shí)依賴:testcompile杜跷,只在測(cè)試階段使用,項(xiàng)目打包上線不依賴矫夷。

build.gradle.kts添加測(cè)試依賴

maven倉(cāng)庫(kù):http://mvnrepository.com/artifact/junit/junit/4.12

…省略…

dependencies {
    compile(kotlin("stdlib"))
    //testCompile
group: 'junit', name: 'junit', version: '4.12'
    //測(cè)試時(shí)依賴
    testCompile("junit","junit","4.12")
}

repositories {
    mavenCentral()
    jcenter()
}

運(yùn)行結(jié)果:注意葛闷,測(cè)試類代碼在src/main/test/java中,或者src/main/test/kotlin

Paste_Image.png

第15節(jié) gradle依賴沖突的解決

15.1 什么是沖突

BOSS:我需要AB來(lái)幫我干活
A:我需要老王1.0版本來(lái)干活
B:我需要老王1.2版本來(lái)干活

BOSS:暈了
調(diào)用老王.開(kāi)發(fā)()的方法
究竟執(zhí)行的是老王1.0版本還是老王1.2版本干活呢双藕?

15.2 gradle自動(dòng)依賴最高版本

第12節(jié)項(xiàng)目中淑趾,http-client依賴logging版本1.0.4,對(duì)該項(xiàng)目添加spring 4.3.9依賴忧陪,發(fā)現(xiàn)loggin版本變成1.2

15.3 手動(dòng)解決依賴沖突

高版本logging1.2理論上兼容1.0.4版本扣泊,gradle會(huì)自動(dòng)解決版本兼容問(wèn)題近范,但是特殊情況,可能會(huì)出現(xiàn)沖突延蟹。

假如评矩,我們希望保留http-client依賴的loggin 1.0.4版本,可以在compile spring依賴中添加閉包阱飘,讓spring去除loggin依賴斥杜,運(yùn)行前面的下載美女圖片任務(wù),也沒(méi)有問(wèn)題
所以沥匈,以后遇到依賴沖突問(wèn)題蔗喂。可以exclude取消其他項(xiàng)目依賴咐熙,保留一個(gè)即可弱恒。

第16節(jié)

gradle插件自定義擴(kuò)展

16.1介紹

擴(kuò)展任務(wù):擴(kuò)展系統(tǒng)自帶的任務(wù),原來(lái)擴(kuò)展任務(wù)這么方便棋恼。

官方文檔:https://docs.gradle.org/current/dsl/index.html

16.2 擴(kuò)展copy任務(wù)

演示擴(kuò)展系統(tǒng)copy任務(wù)

文檔:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Copy.html

task("mycopy", Copy::class, {
    //src/main/java目錄下文件拷貝到  src/main/temp
    from("src/main/java")
    into("src/main/temp")
})

16.2 擴(kuò)展delete任務(wù)

演示刪除src/main/temp目錄下文件

task("mydelete", Delete::class, {
    setDelete("src/main/temp")
})

16.3 擴(kuò)展jar任務(wù)

演示把java文件打成jar包

task("myjar", Jar::class, {
    //把src/main/java打成jar包到 myjar目錄
    from("src/main/java")
    archiveName = "myjar/a.jar"
})

第17節(jié) gradle調(diào)用外部擴(kuò)展

演示:Kotlin調(diào)用java代碼
為什么:以后開(kāi)發(fā)返弹,可能以前用Java寫好了某些功能,現(xiàn)在直接使用Kotlin調(diào)用即可爪飘。

17.1 編譯java

點(diǎn)擊右側(cè)compileJava編譯Java文件成class

Java代碼
public class Girl {
    public static void main(String[] args) {
        System.out.println("我是美女");
    }
}

17.2 kotlin任務(wù)調(diào)用Java

把上面編譯生成的Girl.class保存到項(xiàng)目根目錄

buid.gradle.kts代碼:
plugins { application }

task("callJava", {
    javaexec {
        //java主類
        main = "Girl"
        //根目錄下
        classpath(".")
    }
})

運(yùn)行callJava任務(wù)义起,輸出:我是美女。成功調(diào)用java代碼

第18節(jié) gradle的學(xué)習(xí)方法

如果大家仔細(xì)學(xué)會(huì)了上面的內(nèi)容, 基本上就成為國(guó)內(nèi)第一批 用kotlin語(yǔ)法編寫gradle腳本的程序員.大家可以看到百度搜索只有16個(gè)相關(guān)文章,用kotlin編寫gradle一定是以后的趨勢(shì), groovy這種動(dòng)態(tài)語(yǔ)言的語(yǔ)法,是有先天的不足的...

其實(shí)掌握學(xué)習(xí)方法比知識(shí)點(diǎn)重要:
1.保持技術(shù)敏感度师崎、經(jīng)常關(guān)注gradle技術(shù)博客https://blog.gradle.org/默终,官方技術(shù)博客可以獲取第一手資料。
2.kotlin編寫gradle示例代碼:https://github.com/gradle/kotlin-dsl/tree/master/samples#readme
3.CTO也是從普通開(kāi)發(fā)人員慢慢成長(zhǎng)而來(lái)犁罩,CTO具備技術(shù)前瞻性齐蔽,保持技術(shù)敏感度,日積月累床估。未來(lái)含滴,大家也能夠成長(zhǎng)為技術(shù)大牛。

文章比較長(zhǎng), 看起來(lái)比較累的話歡迎去看騰訊課堂的視頻, 大部分課程可以試學(xué),
如果您覺(jué)得內(nèi)容有幫助希望能購(gòu)買一下課程, 19.9元,每賣出一套我能分到2塊錢, 就當(dāng)請(qǐng)我喝一瓶農(nóng)夫山泉吧. _
騰訊課堂教程配套視頻: https://ke.qq.com/course/235231

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末丐巫,一起剝皮案震驚了整個(gè)濱河市谈况,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌递胧,老刑警劉巖碑韵,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異缎脾,居然都是意外死亡祝闻,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門遗菠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)治筒,“玉大人屉栓,你說(shuō)我怎么就攤上這事∷释啵” “怎么了友多?”我有些...
    開(kāi)封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)堤框。 經(jīng)常有香客問(wèn)我域滥,道長(zhǎng),這世上最難降的妖魔是什么蜈抓? 我笑而不...
    開(kāi)封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任启绰,我火速辦了婚禮,結(jié)果婚禮上沟使,老公的妹妹穿的比我還像新娘委可。我一直安慰自己,他們只是感情好腊嗡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布着倾。 她就那樣靜靜地躺著,像睡著了一般燕少。 火紅的嫁衣襯著肌膚如雪卡者。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天客们,我揣著相機(jī)與錄音崇决,去河邊找鬼。 笑死底挫,一個(gè)胖子當(dāng)著我的面吹牛恒傻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播建邓,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼盈厘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了涝缝?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤譬重,失蹤者是張志新(化名)和其女友劉穎拒逮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臀规,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滩援,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了塔嬉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玩徊。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡租悄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恩袱,到底是詐尸還是另有隱情泣棋,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布畔塔,位于F島的核電站潭辈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏澈吨。R本人自食惡果不足惜把敢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谅辣。 院中可真熱鬧修赞,春花似錦、人聲如沸桑阶。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)联逻。三九已至搓扯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間包归,已是汗流浹背锨推。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留公壤,地道東北人换可。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像厦幅,于是被迫代替她去往敵國(guó)和親沾鳄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理确憨,服務(wù)發(fā)現(xiàn)译荞,斷路器,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,806評(píng)論 6 342
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,091評(píng)論 25 707
  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光劍書架上的書閱讀 3,878評(píng)論 2 8
  • 今天參加了大學(xué)同學(xué)的婚禮休弃,在漕河涇萬(wàn)麗吞歼。感覺(jué)現(xiàn)在的婚禮越來(lái)越貴,17桌加上婚慶等等估計(jì)至少20萬(wàn)塔猾。 回想3年前自己...
    南瓜土豆餅閱讀 171評(píng)論 1 1