終于把項目構(gòu)建神器 Maven 捋清楚了~

今天來給大家介紹一款項目構(gòu)建神器——Maven兄世,不僅能幫我們自動化構(gòu)建,還能夠抽象構(gòu)建過程啊研,提供構(gòu)建任務(wù)實現(xiàn)御滩;它跨平臺,對外提供了一致的操作接口党远,這一切足以使它成為優(yōu)秀的削解、流行的構(gòu)建工具。

PS:星標這種事麸锉,只能求钠绍,不求沒效果舆声,come on花沉。《Java 程序員進階之路》在 GitHub 上已經(jīng)收獲了 675 枚星標媳握,小伙伴們趕緊去點點了碱屁,沖 700 啦

https://github.com/itwanger/toBeBetterJavaer

總結(jié)一下 Maven 的優(yōu)點蛾找,主要有以下 3 點:

  • 依賴管理:Maven 能幫助我們解決軟件包依賴的管理問題娩脾,不再需要提交大量的 jar 包、引入第三方庫打毛;
  • 規(guī)范目錄結(jié)構(gòu):Maven 標準的目錄結(jié)構(gòu)有助于項目構(gòu)建的標準化柿赊,通過配置 profile 還可以根據(jù)不同的環(huán)境(開發(fā)環(huán)境俩功、測試環(huán)境,生產(chǎn)環(huán)境)讀取不同的配置文件碰声;
  • 方便集成:能夠集成在 IDE 中更方便使用诡蜓。

一、安裝 Maven

由于 JDK 是 Maven 安裝的前置條件胰挑,所以請使用 java -version 確認是否已經(jīng)安裝了 JDK:

我本人使用的是 macOS蔓罚,所以可以有兩種安裝方式,一種官網(wǎng)下載瞻颂,手動安裝豺谈;一種直接使用 brew 一鍵安裝

我們先介紹官網(wǎng)下載贡这,手動安裝茬末,該方式同樣適用于 Windows 系統(tǒng),差別可參照 Maven 官網(wǎng)安裝教程:

http://maven.apache.org/install.html

1)一種官網(wǎng)下載盖矫,手動安裝

第一步团南,去官網(wǎng)下載 Maven 安裝包:

官網(wǎng)地址:http://maven.apache.org/download.cgi

很多初學(xué)者在官網(wǎng)下載的時候不知道選哪一個,這里做一下簡單的介紹炼彪。

  • bin(binary)代表由 Java 源文件編譯后的二進制 class 文件吐根,src(source)代表Java 源文件。
  • 一般情況下辐马,選擇 bin 文件進行安裝就 OK 了拷橘;如果你想自己編譯,可選 src 版本喜爷。
  • tar.gz 壓縮格式適用于 Unix 操作系統(tǒng)冗疮,zip 適用于 Windows 操作系統(tǒng);但不是絕對的檩帐。

第二步术幔,解壓下載的安裝包,復(fù)制該路徑:

  • bin 目錄:該包含了 Maven 運行的所有腳本湃密,用來配置 Java 命令诅挑,準備執(zhí)行環(huán)境,然后執(zhí)行 Java 命令泛源。
  • boot 目錄:該目錄只包含了一個 plexus-classworlds-xxx-jar 文件拔妥,該文件是一個類加載器框架,相當于默認的 Java 類加載器达箍,提供了更加豐富的語法以便配置没龙,Maven 使用該加載器加載自己的類庫。
  • conf 目錄:該目錄包含了一個非常重要的文件 settings.xml∮蚕耍可以直接修改該文件解滓,用來全局定制 Maven 的行為;也可以復(fù)制該文件到 ~/.m2/ 目錄下(~表示用戶目錄)筝家,修改該文件可以在用戶范圍內(nèi)定制 Maven 的行為伐蒂。
  • lib 目錄:該目錄包含了Maven運行時所需要的 Java 類庫,包括Maven 依賴的第三方類庫肛鹏,比如 slf4j-api.jar逸邦。

第三步,配置環(huán)境變量

打開終端在扰,輸入 vim ~/.bash_profile 命令打開 bash_profile 文件:

bash_profile 文件用于配置環(huán)境變量和啟動程序缕减,詳細介紹可參照:

https://www.cnblogs.com/kevingrace/p/8072860.html

在文件中添加設(shè)置環(huán)境變量的命令:

export M2_HOME=/Users/maweiqing/cmower/save/apache-maven-3.8.3
export PATH=${PATH}:${M2_HOME}/bin

保存后退出,可以執(zhí)行 source ~/.bash_profile 使配置生效:

第四步芒珠,查看配置是否生效

輸入 mvn -v 命令桥狡,如果輸出以下內(nèi)容,表示配置成功:

如未生效皱卓,可再開一個終端窗口嘗試 mvn -v 命令裹芝。

2)brew 一鍵安裝

第一步,使用 brew install maven 命令一鍵安裝娜汁,并自動配置環(huán)境變量

第二步嫂易,使用 mvn -v 命令查看版本

二、Maven 配置文件大盤點

Maven 是基于 POM(Project Object Model) 進行的掐禁,項目的所有配置都會放在 pom.xml 文件中怜械,包括項目的類型、名字傅事,依賴關(guān)系缕允,插件定制等等。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.itwanger</groupId>
    <artifactId>MavenDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>MavenDemo</name>
</project>
  • 第一行是XML頭蹭越,指定了該xml文檔的版本和編碼方式障本。
  • project 是根元素,聲明了一些POM相關(guān)的命名空間及xsd元素响鹃。
  • modelVersion指定了當前POM的版本驾霜,對于Maven 3來說,值只能是4.0.0茴迁。
  • groupId定義了項目屬于哪個組織寄悯,通常是組織域名的倒序,比如說我的域名是 itwanger.com堕义,所以groupId就是 com.itwanger。
  • artifactId定義了項目在組織中的唯一ID。
  • version指定了項目當前的版本倦卖,SNAPSHOT意為快照洒擦,說明該項目還處于開發(fā)中。
  • name 聲明了一個對于用戶更為友好的項目名稱怕膛。

groupId熟嫩、artifactId和version這三個元素定義了一個項目的基本坐標,在Maven的世界里褐捻,任何的jar和pom都是以基于這些坐標進行區(qū)分的掸茅。

<project>
...
<dependencies>
    <dependency>
        <groupId>實際項目</groupId>
     <artifactId>模塊</artifactId>
     <version>版本</version>
     <type>依賴類型</type>
     <scope>依賴范圍</scope>
     <optional>依賴是否可選</optional>
     <!—主要用于排除傳遞性依賴-->
     <exclusions>
         <exclusion>
           <groupId>…</groupId>
          <artifactId>…</artifactId>
       </exclusion>
     </exclusions>
  </dependency>
<dependencies>
...
</project>
  • dependencies 可以包含一個或者多個dependency元素,以聲明一個或者多個項目依賴柠逞。
  • grounpId昧狮、artifactId和version 組成了依賴的基本坐標。
  • type 指定了依賴的類型板壮,默認為 jar逗鸣。
  • scope 指定了依賴的范圍(詳情見下面依賴范圍部分)。
  • optional 標記了依賴是否是可選的(詳情見下面依賴可選部分)绰精。
  • exclusions 用來排除傳遞性依賴(詳情見下面依賴排除部分)撒璧。

依賴范圍有以下幾種:

  • compile,默認的依賴范圍笨使,表示依賴需要參與當前項目的編譯卿樱,后續(xù)的測試、運行周期也參與其中硫椰,是比較強的依賴殿如。
  • test,表示依賴僅僅參與測試相關(guān)的工作最爬,包括測試代碼的編譯和運行涉馁。比較典型的如 junit。
  • runntime爱致,表示依賴無需參與到項目的編譯烤送,不過后期的測試和運行需要其參與其中。
  • provided糠悯,表示打包的時候可以不用包進去帮坚,別的容器會提供。和 compile 相當互艾,但是在打包階段做了排除的動作试和。
  • system帮辟,從參與程度上來說橘忱,和 provided 類似妹蔽,但不通過 Maven 倉庫解析,可能會造成構(gòu)建的不可移植逃魄,要謹慎使用回还。

關(guān)于傳遞性依賴

比如一個account-email項目為例坷备,account-email有一個compile范圍的spring-code依賴益楼,spring-code有一個compile范圍的commons-logging依賴,那么commons-logging就會成為account-email的compile的范圍依賴寻行,commons-logging是account-email的一個傳遞性依賴:

有了傳遞性依賴機制霍掺,在使用Spring Framework的時候就不用去考慮它依賴了什么,也不用擔心引入多余的依賴拌蜘。Maven會解析各個直接依賴的POM杆烁,將那些必要的間接依賴,以傳遞性依賴的形式引入到當前的項目中简卧。

關(guān)于依賴可選

項目中A依賴B兔魂,B依賴于X和Y,如果所有這三個的范圍都是compile的話贞滨,那么X和Y就是A的compile范圍的傳遞性依賴入热,但是如果我想X、Y不作為A的傳遞性依賴晓铆,不給它用的話勺良,可以按照下面的方式配置可選依賴:

<project>  
    <modelVersion>4.0.0</modelVersion>  
    <groupId>com.itwanger</groupId>  
    <artifactId>project-b</artifactId>  
    <version>1.0.0</version>  
    <dependencies>  
        <dependency>  
            <groupId>mysql</groupId>  
            <artifactId>mysql-connector-java</artifactId>  
            <version>5.1.10</version>  
            <optional>true</optional>  
        </dependency>  
        <dependency>  
            <groupId>postgresql</groupId>  
            <artifactId>postgresql</groupId>  
            <version>8.4-701.jdbc3</version>  
            <optional>true</optional>  
        </dependency>  
    </dependencies>  
</project>

關(guān)于依賴排除

有時候你引入的依賴中包含你不想要的依賴包,你想引入自己想要的骄噪,這時候就要用到排除依賴了尚困,比如下圖中spring-boot-starter-web自帶了logback這個日志包,我想引入log4j2的链蕊,所以我先排除掉logback的依賴包事甜,再引入想要的包就行了。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.5.6</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 使用 log4j2 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    <version>2.5.6</version>
</dependency>

聲明exclustion的時候只需要groupId和artifactId滔韵,不需要version元素逻谦,因為groupId和artifactId就能唯一定位某個依賴。

三陪蜻、Maven 倉庫

在 Maven 的術(shù)語中邦马,倉庫是一個位置(place),項目中依賴的第三方庫以及插件(可統(tǒng)稱為構(gòu)件)宴卖,都放在這里滋将。所有的 Maven 項目都可以共享這個倉庫,只需要根據(jù)依賴的坐標症昏,就可以在需要的時候找到倉庫中的依賴随闽,并使用它們。

舉個例子肝谭,項目中使用了分頁插件的依賴:

<dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper-spring-boot-starter</artifactId>
      <version>1.1.0</version>
</dependency>

那么它對應(yīng)的倉庫路徑是這樣的:

倉庫可以以下幾種:

1)本地倉庫

當Maven在執(zhí)行編譯或測試時掘宪,如果需要使用依賴文件蛾扇,它總是基于坐標使用本地倉庫的依賴文件。

默認情況下添诉,不管是Window還是macOS屁桑,或者是 Linux医寿,每個用戶都會在自己的用戶目錄下有一個路徑名為 .m2/repository/ 的倉庫目錄栏赴。

如果你想自定義本地倉庫目錄地址,可以編輯文件~/.m2/settings.xml靖秩,設(shè)置localRepository元素的值為你想要的倉庫地址须眷,例如:

<localRepository>/path/to/local/repo</localRepository>

如果找不到 ~/.m2/settings.xml 的話,可以到 Maven 的安裝目錄(前文提到的 conf 目錄)下去拷貝沟突。

2)遠程倉庫

默認情況下花颗,本地倉庫是被注釋掉的,也就是空的惠拭,那么就必須得給 Maven 配置一個可用的遠程倉庫扩劝,否則 Maven 在 build(構(gòu)建)的時候就無法去下載依賴。

中央倉庫就是這樣一個可用的遠程倉庫职辅,里面包含了這個世界上絕大多數(shù)流行的開源 Java 類庫棒呛,以及源碼、作者信息域携、許可證信息等等簇秒。

不過,默認的中央倉庫訪問速度比較慢秀鞭,通常我們會選擇使用阿里的 Maven 遠程倉庫趋观。

<repositories>
    <repository>
        <id>ali-maven</id>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>fail</checksumPolicy>
        </snapshots>
    </repository>
</repositories>
  • repositories 可以包含一個或者多個repository元素,以聲明一個或者多個倉庫锋边。
  • id皱坛,倉庫聲明的唯一id,需要注意的是豆巨,Maven自帶的中央倉庫使用的id為central剩辟,如果其他倉庫也使用了該id,就會覆蓋中央倉庫的配置搀矫。
  • url抹沪,指向了倉庫的地址。
  • releases和snapshots瓤球,用來控制Maven對于發(fā)布版構(gòu)件和快照版構(gòu)件的下載權(quán)限融欧。
  • enabled子元素為 true 時表示可以從倉庫下載發(fā)布版構(gòu)件和快照版構(gòu)件。
  • updatePolicy 子元素用來配置Maven從遠處倉庫檢查更新的頻率卦羡。
    • 默認值是daily噪馏,表示每天檢查一次麦到;
    • 可選值 never 表示從不檢查;
    • 可選值always表示每次構(gòu)建時檢查更新欠肾;
    • 可選值interval表示每隔X分鐘檢查一次更新(X為任意整數(shù))瓶颠。
  • checksumPolicy 子元素用來配置Maven檢查校驗的策略。在下載構(gòu)件的時候刺桃,Maven會去校驗粹淋,如果校驗失敗,
    • 當checksumPolicy的值為默認的warn時瑟慈,Maven會在執(zhí)行構(gòu)建時輸出警告信息桃移;
    • 值為fail 時,Maven遇到校驗錯誤就讓構(gòu)建失敻鸨獭借杰;
    • 值為ignore時,Maven將完全忽略校驗进泼。

搭建遠程倉庫的另外一個目的是方便部署我們自己的項目構(gòu)件至遠程倉庫供其他團隊成員使用蔗衡,這時候需要配置distributionManagement元素:

<distributionManagement>
        <repository>
            <id>releases</id>
            <name>public</name>
            <url>http://59.50.95.66:8081/nexus/content/repositories/releases</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Snapshots</name>
            <url>http://59.50.95.66:8081/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
</distributionManagement>
  • repository表示發(fā)布版本構(gòu)件的倉庫。
  • snapshotRepository 表示快照版本(開發(fā)測試用)的倉庫乳绕。
  • 這兩個元素都需要配置id绞惦、name和url,id為遠程倉庫的唯一標識刷袍,name是為了方便閱讀翩隧,url表示倉庫的地址。

配置好了以后運行命令 mvn clean deploy呻纹,Maven就會將項目部署到對應(yīng)的遠程倉庫堆生。項目是快照還是發(fā)布版本通過之前遠程倉庫配置項中的 releases 和 snapshots 來區(qū)分。

3)倉庫鏡像

如果倉庫X可以提供倉庫Y存儲的所有內(nèi)容雷酪,那么就可以認為X是Y的一個鏡像淑仆。通常我們會在 settings.xml 文件中添加阿里云鏡像:

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
  </mirrors>

其中 mirrorOf 元素的可選項有:

  • <mirrorOf>*</mirrorOf>,匹配所有遠程倉庫哥力。
  • <mirrorOf>external:*</mirrorOf>蔗怠,匹配所有遠程倉庫,使用localhost的除外吩跋,使用 file:// 協(xié)議的除外寞射。也就是說,匹配所有不在本機上的遠程倉庫锌钮。
  • <mirrorOf>repo1,repo2</mirrorOf>桥温,匹配倉庫repo1和repo2,使用逗號分隔多個遠程倉庫梁丘。
  • <mirrorOf>*,!repo1<mirrorOf>侵浸,匹配所有遠程倉庫旺韭,repo1除外,使用感嘆號將倉庫從匹配中排除掏觉。

上例中 <mirrorOf>central</mirrorOf> 表示任何對于中央倉庫的請求都會轉(zhuǎn)至該鏡像区端。

4)私服

私服是一種特殊的遠程倉庫,它架設(shè)在局域網(wǎng)內(nèi)中澳腹,私服代理廣域網(wǎng)上的遠程倉庫织盼,供局域網(wǎng)內(nèi)的Maven用戶使用。當Maven需要下載構(gòu)件的時候遵湖,先從私服請求悔政,如果私服上不存在該構(gòu)件晚吞,則從外部的遠程倉庫下載延旧,并緩存到私服上。

私服有以下好處:

  • 節(jié)省外網(wǎng)訪問速度
  • 加速Maven構(gòu)建
  • 提高穩(wěn)定性槽地,增強控制
  • 降低中央倉庫的負荷

5)倉庫服務(wù)搜索

推薦 2 個提供倉庫搜索服務(wù)的網(wǎng)站:

四迁沫、使用 Maven

1)Maven 常見命令

  • mvn clean:表示運行清理操作(會默認把target文件夾中的數(shù)據(jù)清理)。
  • mvn clean compile:表示先運行清理之后運行編譯捌蚊,會將代碼編譯到target文件夾中集畅。
  • mvn clean test:運行清理和測試。
  • mvn clean package:運行清理和打包缅糟。
  • mvn clean install:運行清理和安裝挺智,會將打好的包安裝到本地倉庫中,以便其他的項目可以調(diào)用窗宦。
  • mvn clean deploy:運行清理和發(fā)布(發(fā)布到私服上面)赦颇。

2)Maven 常用 POM 屬性

  • ${project.build.sourceDirectory}:項目的主源碼目錄,默認為src/main/java/
  • ${project.build.testSourceDirectory}:項目的測試源碼目錄赴涵,默認為 /src/test/java/
  • ${project.build.directory}:項目構(gòu)建輸出目錄媒怯,默認為 target/
  • ${project.build.outputDirectory}:項目主代碼編譯輸出目錄,默認為 target/classes/
  • ${project.build.testOutputDirectory}:項目測試代碼編譯輸出目錄髓窜,默認為 target/testclasses/
  • ${project.groupId}:項目的 groupId.
  • ${project.artifactId}:項目的 artifactId.
  • ${project.version}:項目的 version扇苞,于 ${version} 等價
  • ${project.build.finalName}:項目打包輸出文件的名稱,默認為${project.artifactId}${project.version}

3)Intellij IDEA 配置 Maven

4)Maven 常用插件

插件是Maven的核心功能寄纵,它允許在多個項目中重用通用的構(gòu)建邏輯鳖敷。插件可用于:

  • 創(chuàng)建jar文件,
  • 創(chuàng)建war文件程拭,
  • 編譯代碼定踱,
  • 單元測試代碼,
  • 創(chuàng)建項目文檔等哺壶。

常用的插件有:

  • maven-antrun-plugin屋吨,讓用戶在 Maven 項目中運行 Ant 任務(wù)蜒谤。用戶可以直接在該插件的配置以 Ant 的方式編寫 Target,然后交給該插件的 run 目標去執(zhí)行至扰。在一些由 Ant 往 Maven 遷移的項目中鳍徽,該插件尤其有用。此外當你發(fā)現(xiàn)需要編寫一些自定義程度很高的任務(wù)敢课,同時又覺得 Maven 不夠靈活時阶祭,也可以以 Ant 的方式實現(xiàn)之。maven-antrun-plugin 的 run 目標通常與生命周期綁定運行直秆。
  • maven-assembly-plugin濒募,制作項目分發(fā)包,該分發(fā)包可能包含了項目的可執(zhí)行文件圾结、源代碼瑰剃、readme、平臺腳本等等筝野。maven-assembly-plugin 支持各種主流的格式如 zip晌姚、tar.gz、jar 和 war 等歇竟,具體打包哪些文件是高度可控的挥唠,例如用戶可以按文件級別的粒度、文件集級別的粒度焕议、模塊級別的粒度宝磨、以及依賴級別的粒度控制打包,此外盅安,包含和排除配置也是支持的唤锉。maven-assembly-plugin 要求用戶使用一個名為assembly.xml的元數(shù)據(jù)文件來表述打包,它的 single 目標可以直接在命令行調(diào)用宽堆,也可以被綁定至生命周期腌紧。
  • maven-help-plugin,一個小巧的輔助工具畜隶,最簡單的help:system可以打印所有可用的環(huán)境變量和 Java 系統(tǒng)屬性壁肋。help:effective-pom和help:effective-settings最為有用,它們分別打印項目的有效 POM 和有效 settings籽慢,有效 POM 是指合并了所有父 POM(包括 Super POM)后的 XML浸遗,當你不確定 POM 的某些信息從何而來時,就可以查看有效 POM箱亿。
  • maven-javadoc-plugin跛锌,javadoc 插件,將源碼的 javadoc 發(fā)布出去届惋。

希望你能在閱讀完本篇文章后對 Maven 有一個初步的了解和掌握髓帽,并將這些技能在項目的實戰(zhàn)中加以練習(xí)菠赚,以達到項目工程化的要求。

參考鏈接:

嘟嘟MD:http://tengj.top/2018/01/01/maven/
杭建:《Java 工程師修煉之道》
許曉斌:https://www.infoq.cn/article/2011/04/xxb-maven-7-plugin

這是《Java 程序員進階之路》專欄的第 72 篇(記得去點個 star 哦)郑藏。該專欄風(fēng)趣幽默衡查、通俗易懂,對 Java 愛好者極度友好和舒適??必盖,內(nèi)容包括但不限于 Java 基礎(chǔ)拌牲、Java 集合框架、Java IO歌粥、Java 并發(fā)編程塌忽、Java 虛擬機、Java 企業(yè)級開發(fā)(SSM失驶、Spring Boot)等核心知識點土居。

https://github.com/itwanger/toBeBetterJavaer

image

讓我們一起成為更好的 Java 工程師吧!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末突勇,一起剝皮案震驚了整個濱河市装盯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甲馋,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迄损,死亡現(xiàn)場離奇詭異定躏,居然都是意外死亡,警方通過查閱死者的電腦和手機芹敌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門痊远,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人氏捞,你說我怎么就攤上這事碧聪。” “怎么了液茎?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵逞姿,是天一觀的道長。 經(jīng)常有香客問我捆等,道長滞造,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任栋烤,我火速辦了婚禮谒养,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘明郭。我一直安慰自己买窟,他們只是感情好丰泊,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著始绍,像睡著了一般趁耗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疆虚,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天苛败,我揣著相機與錄音,去河邊找鬼径簿。 笑死罢屈,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的篇亭。 我是一名探鬼主播缠捌,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼译蒂!你這毒婦竟也來了曼月?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤柔昼,失蹤者是張志新(化名)和其女友劉穎哑芹,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捕透,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡聪姿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了乙嘀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片末购。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖虎谢,靈堂內(nèi)的尸體忽然破棺而出盟榴,到底是詐尸還是另有隱情,我是刑警寧澤婴噩,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布擎场,位于F島的核電站,受9級特大地震影響讳推,放射性物質(zhì)發(fā)生泄漏顶籽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一银觅、第九天 我趴在偏房一處隱蔽的房頂上張望礼饱。 院中可真熱鬧,春花似錦、人聲如沸镊绪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝴韭。三九已至够颠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間榄鉴,已是汗流浹背履磨。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庆尘,地道東北人剃诅。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像驶忌,于是被迫代替她去往敵國和親矛辕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

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