Maven使用入門/安裝/配置

Maven使用入門

1. Maven概述

Maven是什么瘫想?
Maven項(xiàng)目對(duì)象模型(POM)蚊惯,可以通過(guò)一小段描述信息來(lái)管理項(xiàng)目的構(gòu)建创倔,報(bào)告和文檔的軟件項(xiàng)目管理工具翔脱。
為什么要使用Maven瘩扼?
Maven 除了以程序構(gòu)建能力為特色之外谆甜,還提供高級(jí)項(xiàng)目管理工具。由于 Maven 的缺省構(gòu)建規(guī)則有較高的可重用性集绰,所以常常用兩三行 Maven 構(gòu)建腳本就可以構(gòu)建簡(jiǎn)單的項(xiàng)目规辱。由于 Maven 的面向項(xiàng)目的方法,許多 Apache Jakarta 項(xiàng)目發(fā)文時(shí)使用 Maven栽燕,而且公司項(xiàng)目采用 Maven 的比例在持續(xù)增長(zhǎng)罕袋。
Maven的特點(diǎn)
Maven 和 Ant 有什么不同呢?在回答這個(gè)問(wèn)題以前碍岔,首先要強(qiáng)調(diào)一點(diǎn):Maven 和 Ant 針對(duì)構(gòu)建問(wèn)題的兩個(gè)不同方面浴讯。Ant 為 Java 技術(shù)開發(fā)項(xiàng)目提供跨平臺(tái)構(gòu)建任務(wù)。Maven 本身描述項(xiàng)目的高級(jí)方面蔼啦,它從 Ant 借用了絕大多數(shù)構(gòu)建任務(wù)榆纽。因此,由于 Maven 和 Ant代表兩個(gè)差異很大的工具,所以接下來(lái)只說(shuō)明這兩個(gè)工具的等同組件之間的區(qū)別奈籽,如表 1 所示:

表1

Maven常用命令

mvn archetype:generate 創(chuàng)建Maven項(xiàng)目
mvn compile 編譯源代碼
mvn deploy 發(fā)布項(xiàng)目
mvn test-compile 編譯測(cè)試源代碼
mvn test 運(yùn)行應(yīng)用程序中的單元測(cè)試
mvn site 生成項(xiàng)目相關(guān)信息的網(wǎng)站
mvn clean 清除項(xiàng)目目錄中的生成結(jié)果
mvn package 根據(jù)項(xiàng)目生成的jar
mvn install 在本地Repository中安裝jar
mvn eclipse:eclipse 生成eclipse項(xiàng)目文件
mvnjetty:run 啟動(dòng)jetty服務(wù)
mvntomcat:run 啟動(dòng)tomcat服務(wù)
mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包饥侵,跳過(guò)測(cè)試類

Maven的基本功能

? 構(gòu)建:比如生成class、jar衣屏、war或者ear文件
? 生成文檔:比如生成javadoc躏升、網(wǎng)站文檔
? 生成報(bào)告:比如junit測(cè)試報(bào)告
? 生成依賴類庫(kù):生成文檔,說(shuō)明項(xiàng)目多其他軟件的依賴
? 有關(guān)SCM:SCM(Software Configuration Management)狼忱,軟件配置管理膨疏,比如版本控制,比如bug管理等等
? 發(fā)布:生成供發(fā)布的分發(fā)包钻弄,比如生成Struts2的分發(fā)包佃却,供提交給用戶使用
? 部署:比如,web應(yīng)用程序斧蜕,自動(dòng)部署到指定的服務(wù)器上

maven的其他優(yōu)勢(shì)

  • maven不僅是構(gòu)建工具双霍,它還是依賴管理工具和項(xiàng)目管理工具砚偶,提供了中央倉(cāng)庫(kù)批销,能夠幫我們自動(dòng)下載構(gòu)件。
  • 為了解決的依賴的增多染坯,版本不一致均芽,版本沖突,依賴臃腫等問(wèn)題单鹿,它通過(guò)一個(gè)坐標(biāo)系統(tǒng)來(lái)精確地定位每一個(gè)構(gòu)件(artifact)掀宋。
  • 幫助我們分散在各個(gè)角落的項(xiàng)目信息,包括項(xiàng)目描述仲锄,開發(fā)者列表劲妙,版本控制系統(tǒng),許可證儒喊,缺陷管理系統(tǒng)地址镣奋。
  • maven還為全世界的java開發(fā)者提供了一個(gè)免費(fèi)的中央倉(cāng)庫(kù),在其中幾乎可以找到任何的流行開源軟件怀愧。通過(guò)衍生工具(Nexus),我們還能對(duì)其進(jìn)行快速搜索
  • maven對(duì)于目錄結(jié)構(gòu)有要求侨颈,約定優(yōu)于配置,用戶在項(xiàng)目間切換就省去了學(xué)習(xí)成本芯义。

2. Maven 安裝以及eclipse配置

  1. 在apche官方網(wǎng)站http://maven.apache.org/download.cgi 下載bin哈垢;
  2. 下載下來(lái)之后,解壓扛拨,找個(gè)路徑放進(jìn)去耘分, 把bin的位置設(shè)在環(huán)境變量里,新建環(huán)境變量MAVEN_HOME;


  3. 在PATH里加入maven的bin的路徑求泰;


  4. 由于Maven依賴Java運(yùn)行環(huán)境啤贩,因此使用Maven之前需要配置Java的運(yùn)行環(huán)境。下載并安裝JDK拜秧,配置JDK的環(huán)境變量JAVA_HOME痹屹,否則maven將無(wú)法使用;
  5. 配置完畢后枉氮,在Windows命令提示符下志衍,輸入mvn -v測(cè)試一下,配置成功顯示如圖:


  6. 配置成功后開始在Eclipse中配置Maven,點(diǎn)擊eclipse菜單欄Help->Eclipse Marketplace搜索關(guān)鍵字maven到插件Maven Integration for Eclipse 并點(diǎn)擊安裝即可聊替,如下圖:




  7. 安裝完畢后楼肪,點(diǎn)擊重啟eclipse力九;
  8. 重啟后千埃,為了使得Eclipse中安裝的Maven插件,同windows中安裝的那個(gè)相同碾褂,需要讓eclipse中的maven重新定位一下泣港,點(diǎn)擊Window -> Preference -> Maven -> Installation -> Add進(jìn)行設(shè)置


  9. 然后暂殖, 我們?cè)贛aven的配置界面,設(shè)置User Settings Global Settings選擇maven 安裝目錄下conf文件夾下的settings.xml当纱,這里我的Maven安裝目錄為D:\apache-maven-3.5.2\conf\settings.xml呛每,選擇你的Maven安裝目錄,檢查L(zhǎng)ocal Repository 項(xiàng)坡氯,如果為D:\Qrsoft\maven\repository則配置成功晨横,否則重新配置上一步。


  10. 設(shè)置成功即安裝完成箫柳。

3. 使用

3.1 創(chuàng)建Maven項(xiàng)目
  1. 我們?cè)贓clipse菜單欄中點(diǎn)擊File->New->Other->Maven,在彈出的對(duì)話框中會(huì)看到手形,如下圖所示:


  2. 選擇Maven Project,請(qǐng)選中Create a simple project(skip archetype selection),之后點(diǎn)擊Next悯恍;
  3. 選擇”maven-archetype-webapp";



    填寫Group id和Artifact id库糠, Version默認(rèn),Packaging默認(rèn)為jar,Name坪稽,Description選填曼玩,其他的不填(這里我已經(jīng)創(chuàng)建過(guò)該項(xiàng)目了,所以會(huì)提示already exists) 窒百。


  4. 創(chuàng)建好項(xiàng)目后黍判,目錄如下:


  5. 至此,項(xiàng)目已經(jīng)創(chuàng)建完畢篙梢,下邊開始配置顷帖;
  6. 添加Source Folder:
    Maven規(guī)定,必須創(chuàng)建以下幾個(gè)Source Folder
    src/main/resources
    src/main/java
    src/test/resources
    src/test/java
    添加以上的Source Folder(如果已經(jīng)存在,可忽略此步驟)贬墩,添加完后榴嗅,如下圖所示:


  7. 配置Build Path;



    設(shè)定4個(gè)文件夾的輸出Output folder陶舞,雙擊修改:



    分別修改輸出路徑為
    src/main/resources  對(duì)應(yīng)  target/classes

    src/main/java  對(duì)應(yīng)  target/classes
    src/test/resources  對(duì)應(yīng)  target/test-classes
    src/test/java  對(duì)應(yīng)  target/test-classes

修改后如下圖:


  1. 設(shè)定Libraries


  2. 完成,接下來(lái)就可以編寫自己的程序了嗽测。
3.2 Maven項(xiàng)目的目錄約定
3.3 pox.xml解讀

(1). modelVersion
指定了當(dāng)前Maven模型的版本號(hào),對(duì)于Maven2和Maven3來(lái)說(shuō)肿孵,它只能是4.0.0唠粥;
(2). groupId
顧名思義,這個(gè)應(yīng)該是公司名或是組織名停做。一般來(lái)說(shuō)groupId是由三個(gè)部分組成晤愧,每個(gè)部分之間以"."分隔,第一部分是項(xiàng)目用途蛉腌,比如用于商業(yè)的就是"com"官份,用于非營(yíng)利性組織的就是"org";第二部分是公司名烙丛,比如"tengxun"舅巷、"baidu"、"alibaba"蜀变;第三部分是你的項(xiàng)目名
(3). artifactId
可以認(rèn)為是Maven構(gòu)建的項(xiàng)目名悄谐,比如你的項(xiàng)目中有子項(xiàng)目介评,就可以使用"項(xiàng)目名-子項(xiàng)目名"的命名方式
(4). Version
版本號(hào)库北,SNAPSHOT意為快照,說(shuō)明該項(xiàng)目還在開發(fā)中们陆,是不穩(wěn)定的版本寒瓦。在Maven中很重要的一點(diǎn)是,groupId坪仇、artifactId杂腰、version三個(gè)元素生成了一個(gè)Maven項(xiàng)目的基本坐標(biāo),這非常重要椅文!
在上面的這些元素之外喂很,還有一些元素,同樣羅列一下:

  1. Packing
    項(xiàng)目打包的類型皆刺,可以使jar少辣、war、rar羡蛾、ear漓帅、pom,默認(rèn)是jar;
  2. dependencies和dependency
    前者包含后者忙干。前面說(shuō)了器予,Maven的一個(gè)重要作用就是統(tǒng)一管理jar包,為了一個(gè)項(xiàng)目可以build或運(yùn)行捐迫,項(xiàng)目中不可避免的乾翔,會(huì)依賴很多其他的jar包,在Maven中施戴,這些依賴就被稱為dependency末融。

說(shuō)到這里,就有一個(gè)本地倉(cāng)庫(kù)遠(yuǎn)程倉(cāng)庫(kù)的概念了暇韧。官方下載的本地倉(cāng)庫(kù)的配置在"%MAVEN_HOME%\conf\settings.xml"里面勾习,找一下"localRepository"就可以了(可以自己定義下載下來(lái)的jar包的存放位置,見https://www.cnblogs.com/xdp-gacl/p/3498271.html )懈玻;MyEclipse默認(rèn)的本地倉(cāng)庫(kù)的地址在"{user.home}/.m2/repository"路徑下巧婶,同樣找一下"localRepository"就可以找到MyEclipse默認(rèn)的本地倉(cāng)庫(kù)了。

本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)是這樣的涂乌,Maven工程首先會(huì)從本地倉(cāng)庫(kù)中獲取jar包艺栈,當(dāng)無(wú)法獲取指定jar包時(shí),本地倉(cāng)庫(kù)會(huì)從遠(yuǎn)程倉(cāng)庫(kù)(中央倉(cāng)庫(kù))中下載jar包湾盒,并放入本地倉(cāng)庫(kù)以備將來(lái)使用湿右。

舉個(gè)例子,比方說(shuō)我的項(xiàng)目中用到了MyBatis罚勾,那么可以這么配置:

<dependencies>

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.2.5</version>

</dependency>

</dependencies>

之前有說(shuō)過(guò)groupId毅人、artifactId、version唯一標(biāo)識(shí)一個(gè)Maven項(xiàng)目尖殃,有了這三個(gè)元素丈莺,我們就可以去遠(yuǎn)程倉(cāng)庫(kù)下載MyBatis3.2.5.jar到本地倉(cāng)庫(kù)了∷头幔回想我們之前的做法缔俄,如果要MyBatis的jar包,發(fā)現(xiàn)沒有器躏,然后去網(wǎng)上下載一個(gè),需要另外的jar包登失,然后去網(wǎng)上下載一個(gè),但是有了Maven壁畸,就方便多了贼急,只需要配置jar包對(duì)應(yīng)的dependency依賴碴倾,Maven會(huì)自動(dòng)幫助我們?nèi)ミh(yuǎn)程倉(cāng)庫(kù)中下載jar包到本地倉(cāng)庫(kù)中僧须。

  1. properties
    properties是用來(lái)定義一些配置屬性的,例如project.build.sourceEncoding(項(xiàng)目構(gòu)建源碼編碼方式)闻蛀,可以設(shè)置為UTF-8泽篮,防止中文亂碼,也可定義相關(guān)構(gòu)建版本號(hào)柑船,便于日后統(tǒng)一升級(jí)帽撑。
  2. build
    build表示與構(gòu)建相關(guān)的配置,比如build下有finalName鞍时,表示的就是最終構(gòu)建之后的名稱亏拉。
3.4添加本地jar包
  1. 首先我在項(xiàng)目根目錄中創(chuàng)建一個(gè)lib文件夾扣蜻,將jar包拷貝到lib文件夾下:


  2. 然后我們?cè)趍aven的pom.xml中配置:
    <dependency>
    <groupId>com.localjar.jar1</groupId>
    <artifactId>jar1</artifactId>
    <version>0.0.1</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/hadoop-ext.jar
    </systemPath>
    </dependency>
    <dependency>
    <groupId>com.localjar.jar2</groupId>
    <artifactId>jar2</artifactId>
    <version>0.0.1</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/mr.proj.jar
    </systemPath>
    </dependency>
    這里的groupId和artifactId以及version都是可以隨便填寫的 ,scope必須填寫為system及塘,而systemPath寫現(xiàn)在我們jar包的地址就可以了莽使;
3.5 添加外部jar包
  1. 去mvnrepository 官網(wǎng) http://mvnrepository.com/ 查找需要的jar包,復(fù)制dependency代碼到pom.xml中即可笙僚。
    例如想查找org.apache.commons.lang.StringUtils芳肌,可以輸入commons,


    點(diǎn)一個(gè)適合的版本肋层,例如我選2.6:

    把代碼拷貝到pom的<dependencies></ dependencies >中即可亿笤。

4. Maven入門使用常見問(wèn)題

說(shuō)明:這些問(wèn)題有的是從網(wǎng)上找的,有的是我自己遇到的栋猖,能否解決您的問(wèn)題視情況而定净薛,具體問(wèn)題還要具體分析,不行就找度娘哈蒲拉。

  1. 我從SVN上下載了一個(gè)以Maven構(gòu)建的工程罕拂,下載完畢沒有jar包怎么辦?
    從資源庫(kù)上下載下來(lái)的Maven工程全陨,是沒有jar包的爆班,此時(shí)可以這么做:
    (1)刪除Maven工程,但是刪除的時(shí)候不要?jiǎng)h除本地工程里面的Maven工程辱姨,只刪除MyEclipse中的Maven工程
    (2)右鍵Import->Maven4MyEclipse->Existing Maven Projects柿菩,導(dǎo)入你的Maven工程,此時(shí)MyEclipse在構(gòu)建工程的時(shí)候雨涛,假如你的本地倉(cāng)庫(kù)中沒有dependcy中的jar包枢舶,便會(huì)去遠(yuǎn)程倉(cāng)庫(kù)下載jar包到本地倉(cāng)庫(kù)中。你的工程導(dǎo)入完畢之后替久,Library應(yīng)該是這樣的:


  2. 重新下載Maven工程所依賴的jar包凉泄、導(dǎo)入jar包都需要觸發(fā)Maven工程的build workspace,那么如何才能觸發(fā)Maven工程的build workspace蚯根?
    找到一個(gè)pom.xml后众,隨便修改一下,加一個(gè)空格颅拦、減一個(gè)空格什么的蒂誉,ctrl+s保存一下,便會(huì)觸發(fā)Maven工程的build workspace了
  3. 本地倉(cāng)庫(kù)的目錄結(jié)構(gòu)是什么樣子的距帅?
    groupId右锨、artifactId、version確定一個(gè)唯一的Maven碌秸,比方說(shuō)我有一個(gè)mybatis的dependcy:
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.5</version>
    </dependency>
    那么mybatis的jar包應(yīng)該在%Maven倉(cāng)庫(kù)地址%\org\mybatis\mybatis\3.2.5\這一路徑下绍移,看到了吧悄窃,先groupId,再mybatis蹂窖,最后version轧抗,每個(gè)名字都是一個(gè)文件夾的名字
  4. 有些jar包在dependcy里面有配置,Import了Maven工程恼策,下載完工程所依賴的jar包之后鸦致,發(fā)現(xiàn)本地倉(cāng)庫(kù)里面卻沒有,怎么辦涣楷?
    可能是原先下載jar包的時(shí)候出了什么問(wèn)題分唾,從artifactId目錄開始刪除以下的所有文件/文件夾,然后觸發(fā)一次Maven工程的build workspace就可以了
  5. 本地倉(cāng)庫(kù)中確定已經(jīng)有jar包了狮斗,工程里面卻報(bào)錯(cuò)绽乔,說(shuō)找不到j(luò)ar包,該怎么辦碳褒?
    應(yīng)該有很多解決辦法折砸,目前解決的一種辦法是,MyEclipse->Window->Preferences->搜索Maven->User Settings,Update Settings和Reindex點(diǎn)一下就好了沙峻。另外睦授,可以嘗試一下把本地Maven倉(cāng)庫(kù)內(nèi)的jar包刪除一下,然后重新build workspace摔寨,可能也可以去枷。
  6. 項(xiàng)目上有紅叉提示錯(cuò)誤,但是整個(gè)項(xiàng)目沒有任何文件有錯(cuò)是复,怎么辦删顶?
    解決辦法就是:
    右鍵項(xiàng)目,【Maven】--》【Update Project Configuration...】即可淑廊。
  7. Maven構(gòu)建項(xiàng)目后項(xiàng)目報(bào)Error錯(cuò)誤Java compiler level does not match the version of the installed Java project facet逗余。
    項(xiàng)目->右鍵->Project Facets->修改facets中java版本(下拉箭頭出)為要用的版本
    Maven構(gòu)建項(xiàng)目需注意
    1.項(xiàng)目右鍵->Preferences->buildpath->jdk版本
    2.項(xiàng)目右鍵->Preferences->javacompiler->jdk版本
    3.項(xiàng)目右鍵->Preferences->ProjectFacets->jdk版本

先講這些哈,如有錯(cuò)誤季惩,歡迎指正录粱。
喜歡別忘點(diǎn)個(gè)攢哈,筆芯~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜀备,一起剝皮案震驚了整個(gè)濱河市关摇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碾阁,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件些楣,死亡現(xiàn)場(chǎng)離奇詭異脂凶,居然都是意外死亡宪睹,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門蚕钦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)亭病,“玉大人,你說(shuō)我怎么就攤上這事嘶居∽锾” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵邮屁,是天一觀的道長(zhǎng)整袁。 經(jīng)常有香客問(wèn)我,道長(zhǎng)佑吝,這世上最難降的妖魔是什么坐昙? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮芋忿,結(jié)果婚禮上炸客,老公的妹妹穿的比我還像新娘。我一直安慰自己戈钢,他們只是感情好痹仙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著殉了,像睡著了一般开仰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宣渗,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天抖所,我揣著相機(jī)與錄音,去河邊找鬼痕囱。 笑死田轧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鞍恢。 我是一名探鬼主播傻粘,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼帮掉!你這毒婦竟也來(lái)了弦悉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蟆炊,失蹤者是張志新(化名)和其女友劉穎稽莉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涩搓,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡污秆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年劈猪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片良拼。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡战得,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庸推,到底是詐尸還是另有隱情常侦,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布贬媒,位于F島的核電站聋亡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掖蛤。R本人自食惡果不足惜杀捻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚓庭。 院中可真熱鬧致讥,春花似錦、人聲如沸器赞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)港柜。三九已至请契,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間夏醉,已是汗流浹背爽锥。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畔柔,地道東北人氯夷。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像靶擦,于是被迫代替她去往敵國(guó)和親腮考。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353