Spring Boot項(xiàng)目使用maven-assembly-plugin根據(jù)不同環(huán)境打包成tar.gz或者zip

spring-boot-assembly

  1. 在spring boot項(xiàng)目中使用maven profiles和maven assembly插件根據(jù)不同環(huán)境打包成tar.gz或者zip
  2. 將spring boot項(xiàng)目中的配置文件提取到外部config目錄中
  3. 將spring boot項(xiàng)目中的啟動jar包移動到boot目錄中
  4. 將spring boot項(xiàng)目中的第三方依賴jar包移動到外部lib目錄中
  5. bin目錄中是啟動,停止砍濒,重啟服務(wù)命令
  6. 打包后的目錄結(jié)構(gòu)類似于tomcat/maven目錄結(jié)構(gòu)

代碼托管

Github | Gitee

主要插件

  1. maven-assembly-plugin
  2. maven-jar-plugin
  3. spring-boot-maven-plugin
  4. maven-dependency-plugin
  5. maven-resources-plugin

1.maven-assembly-plugin 配置assembly.xml文件路徑

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <descriptors>
            <descriptor>src/main/assembly/assembly.xml</descriptor>
        </descriptors>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

2.assembly.xml打包配置文件

<?xml version="1.0" encoding="UTF-8"?>
<assembly>
    <!-- 可自定義淋肾,這里指定的是項(xiàng)目環(huán)境 -->
    <!-- spring-boot-assembly-local-1.0.RELEASE.tar.gz  -->
    <id>${profileActive}-${project.version}</id>

    <!-- 打包的類型,如果有N個(gè)爸邢,將會打N個(gè)類型的包 -->
    <formats>
        <format>tar.gz</format>
        <!--<format>zip</format>-->
    </formats>

    <includeBaseDirectory>true</includeBaseDirectory>

    <fileSets>
        <!--
            0755->即用戶具有讀/寫/執(zhí)行權(quán)限樊卓,組用戶和其它用戶具有讀寫權(quán)限;
            0644->即用戶具有讀寫權(quán)限杠河,組用戶和其它用戶具有只讀權(quán)限碌尔;
        -->

        <!-- 將src/bin目錄下的所有文件輸出到打包后的bin目錄中 -->
        <fileSet>
            <directory>${basedir}/src/bin</directory>
            <outputDirectory>bin</outputDirectory>
            <fileMode>0755</fileMode>
            <includes>
                <include>**.sh</include>
                <include>**.bat</include>
            </includes>
        </fileSet>

        <!-- 指定輸出target/classes中的配置文件到config目錄中 -->
        <fileSet>
            <directory>${basedir}/target/classes</directory>
            <outputDirectory>config</outputDirectory>
            <fileMode>0644</fileMode>
            <includes>
                <include>application.yml</include>
                <include>application-${profileActive}.yml</include>
                <include>mapper/**/*.xml</include>
                <include>static/**</include>
                <include>templates/**</include>
                <include>*.xml</include>
                <include>*.properties</include>
            </includes>
        </fileSet>

        <!-- 將第三方依賴打包到lib目錄中 -->
        <fileSet>
            <directory>${basedir}/target/lib</directory>
            <outputDirectory>lib</outputDirectory>
            <fileMode>0755</fileMode>
        </fileSet>

        <!-- 將項(xiàng)目啟動jar打包到boot目錄中 -->
        <fileSet>
            <directory>${basedir}/target</directory>
            <outputDirectory>boot</outputDirectory>
            <fileMode>0755</fileMode>
            <includes>
                <include>${project.build.finalName}.jar</include>
            </includes>
        </fileSet>

        <!-- 包含根目錄下的文件 -->
        <fileSet>
            <directory>${basedir}</directory>
            <includes>
                <include>NOTICE</include>
                <include>LICENSE</include>
                <include>*.md</include>
            </includes>
        </fileSet>
    </fileSets>

</assembly>

3.spring-boot-maven-plugin 排除啟動jar包中依賴的jar包

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <layout>ZIP</layout>
        <includes>
            <!-- 項(xiàng)目啟動jar包中排除依賴包 -->
            <include>
                <groupId>non-exists</groupId>
                <artifactId>non-exists</artifactId>
            </include>
        </includes>
    </configuration>
</plugin>

4.maven-jar-plugin 自定義maven jar打包內(nèi)容

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <archive>
            <manifest>
                <!-- 項(xiàng)目啟動類 -->
                <mainClass>Application</mainClass>
                <!-- 依賴的jar的目錄前綴 -->
                <classpathPrefix>../lib</classpathPrefix>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
        <includes>
            <!-- 只打包指定目錄的文件 -->
            <include>io/geekidea/springboot/**</include>
        </includes>
    </configuration>
</plugin>    

5.maven-dependency-plugin 復(fù)制項(xiàng)目的依賴包到指定目錄

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>target/lib</outputDirectory>
                <overWriteReleases>false</overWriteReleases>
                <overWriteSnapshots>false</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
                <includeScope>compile</includeScope>
            </configuration>
        </execution>
    </executions>
</plugin>    

6.maven-resources-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.1.0</version>
</plugin>

<resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
    <includes>
        <include>application.yml</include>
        <include>application-${profileActive}.yml</include>
        <include>mapper/**/*.xml</include>
        <include>static/**</include>
        <include>templates/**</include>
        <include>*.xml</include>
        <include>*.properties</include>
    </includes>
</resource>

7.maven profiles配置

<!--MAVEN打包選擇運(yùn)行環(huán)境-->
<!-- 1:local(默認(rèn)) 本地 2:dev:開發(fā)環(huán)境 3:test 4:uat 用戶驗(yàn)收測試 5.pro:生產(chǎn)環(huán)境-->
<profiles>
    <profile>
        <id>local</id>
        <properties>
            <profileActive>local</profileActive>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>dev</id>
        <properties>
            <profileActive>dev</profileActive>
        </properties>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <profileActive>test</profileActive>
        </properties>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>uat</id>
        <properties>
            <profileActive>uat</profileActive>
        </properties>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <profileActive>prod</profileActive>
        </properties>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>
</profiles>

8.阿里云倉庫配置

<repositories>
    <!--阿里云倉庫-->
    <repository>
        <id>aliyun</id>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </repository>
</repositories>

項(xiàng)目源碼結(jié)構(gòu)
├─bin
│      restart.sh
│      shutdown.sh
│      startup.bat
│      startup.sh
│
├─logs
│      springboot-assembly.log
│
├─main
│  ├─assembly
│  │      assembly.xml
│  │
│  ├─java
│  │  └─io
│  │      └─geekidea
│  │          └─springboot
│  │              └─assembly
│  │                      Application.java
│  │                      HelloController.java
│  │                      HelloService.java
│  │                      HelloServiceImpl.java
│  │
│  └─resources
│      │  application-dev.yml
│      │  application-local.yml
│      │  application-prod.yml
│      │  application-test.yml
│      │  application-uat.yml
│      │  application.yml
│      │
│      ├─mapper
│      │  │  test.xml
│      │  │
│      │  └─hello
│      │          hello.xml
│      │
│      ├─static
│      │      index.html
│      │
│      └─templates
│              test.txt
│
└─test
項(xiàng)目打包
mvn clean package
使用maven assembly插件打包local環(huán)境后的壓縮包,target目錄下
spring-boot-assembly-local-1.0.RELEASE.tar.gz
linux解壓tar.gz
tar -zxvf spring-boot-assembly-local-1.0.RELEASE.tar.gz
解壓后的目錄結(jié)構(gòu)
└─spring-boot-assembly
    │  LICENSE
    │  NOTICE
    │  README.md
    │
    ├─bin
    │      restart.sh
    │      shutdown.sh
    │      startup.bat
    │      startup.sh
    │
    ├─boot
    │      spring-boot-assembly.jar
    │
    ├─config
    │  │  application-local.yml
    │  │  application.yml
    │  │
    │  ├─mapper
    │  │  │  test.xml
    │  │  │
    │  │  └─hello
    │  │          hello.xml
    │  │
    │  ├─static
    │  │      index.html
    │  │
    │  └─templates
    │          test.txt
    │
    └─lib
            classmate-1.4.0.jar
            fastjson-1.2.54.jar
            hibernate-validator-6.0.13.Final.jar
            jackson-annotations-2.9.0.jar
            jackson-core-2.9.7.jar
            jackson-databind-2.9.7.jar
            jackson-datatype-jdk8-2.9.7.jar
            jackson-datatype-jsr310-2.9.7.jar
            jackson-module-parameter-names-2.9.7.jar
            javax.annotation-api-1.3.2.jar
            jboss-logging-3.3.2.Final.jar
            jul-to-slf4j-1.7.25.jar
            log4j-api-2.11.1.jar
            log4j-to-slf4j-2.11.1.jar
            logback-classic-1.2.3.jar
            logback-core-1.2.3.jar
            slf4j-api-1.7.25.jar
            snakeyaml-1.23.jar
            spring-aop-5.1.2.RELEASE.jar
            spring-beans-5.1.2.RELEASE.jar
            spring-boot-2.1.0.RELEASE.jar
            spring-boot-autoconfigure-2.1.0.RELEASE.jar
            spring-boot-starter-2.1.0.RELEASE.jar
            spring-boot-starter-json-2.1.0.RELEASE.jar
            spring-boot-starter-logging-2.1.0.RELEASE.jar
            spring-boot-starter-tomcat-2.1.0.RELEASE.jar
            spring-boot-starter-web-2.1.0.RELEASE.jar
            spring-context-5.1.2.RELEASE.jar
            spring-core-5.1.2.RELEASE.jar
            spring-expression-5.1.2.RELEASE.jar
            spring-jcl-5.1.2.RELEASE.jar
            spring-web-5.1.2.RELEASE.jar
            spring-webmvc-5.1.2.RELEASE.jar
            tomcat-embed-core-9.0.12.jar
            tomcat-embed-el-9.0.12.jar
            tomcat-embed-websocket-9.0.12.jar
            validation-api-2.0.1.Final.jar

window啟動,會打開瀏覽器浇辜,訪問項(xiàng)目測試路徑
bin/startup.bat
{"msg":"service hello:123","code":200}
linux啟動,停止唾戚,重啟
sh bin/startup.sh   啟動項(xiàng)目
sh bin/shutdown.sh  停止服務(wù)
sh bin/restart.sh   重啟服務(wù)
startup.sh 腳本中的主要內(nèi)容
  • 配置項(xiàng)目名稱及項(xiàng)目啟動jar名稱柳洋,默認(rèn)項(xiàng)目名稱與啟動jar名稱一致
APPLICATION="spring-boot-assembly"
APPLICATION_JAR="${APPLICATION}.jar"
  • JAVA_OPTION配置
  • JVM Configuration
  • -Xmx256m:設(shè)置JVM最大可用內(nèi)存為256m,根據(jù)項(xiàng)目實(shí)際情況而定,建議最小和最大設(shè)置成一樣叹坦。
  • -Xms256m:設(shè)置JVM初始內(nèi)存熊镣。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)存
  • -Xmn512m:設(shè)置年輕代大小為512m。整個(gè)JVM內(nèi)存大小=年輕代大小 + 年老代大小 + 持久代大小募书。持久代一般固定大小為64m,所以增大年輕代,將會減小年老代大小绪囱。此值對系統(tǒng)性能影響較大,Sun官方推薦配置為整個(gè)堆的3/8
  • -XX:MetaspaceSize=64m:存儲class的內(nèi)存大小,該值越大觸發(fā)Metaspace GC的時(shí)機(jī)就越晚
  • -XX:MaxMetaspaceSize=320m:限制Metaspace增長的上限,防止因?yàn)槟承┣闆r導(dǎo)致Metaspace無限的使用本地內(nèi)存莹捡,影響到其他程序
  • -XX:-OmitStackTraceInFastThrow:解決重復(fù)異常不打印堆棧信息問題
JAVA_OPT="-server -Xms256m -Xmx256m -Xmn512m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=256m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"

執(zhí)行啟動命令:后臺啟動項(xiàng)目,并將日志輸出到項(xiàng)目根目錄下的logs文件夾下

nohup java ${JAVA_OPT} -jar ${BASE_PATH}/boot/${APPLICATION_JAR} --spring.config.location=${CONFIG_DIR} > ${LOG_PATH} 2>&1 &

最終執(zhí)行jar包的命令

nohup java -server -Xms256m -Xmx256m -Xmn512m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=256m -XX:-OmitStackTraceInFastThrow -jar /opt/spring-boot-assembly/boot/spring-boot-assembly.jar --spring.config.location=/opt/spring-boot-assembly/config/ > /opt/spring-boot-assembly/logs/spring-boot-assembly.log 2>&1 &
  • nohup:在后臺運(yùn)行jar包鬼吵,然后將運(yùn)行日志輸出到指定位置
  • -server:指定JVM參數(shù)
  • -jar /opt/spring-boot-assembly/boot/spring-boot-assembly.jar:指定啟動的jar包
  • 啟動命令中指定的啟動jar包路徑,配置文件路徑篮赢,日志路徑都是絕對路徑
  • 可在任何位置執(zhí)行start.sh,shutdown.sh,restart.sh腳本
  • --spring.config.location:指定配置文件目錄或者文件名稱齿椅,如果是目錄,以/結(jié)束
  • > /opt/spring-boot-assembly/logs/spring-boot-assembly.log:指定日志輸出路徑
  • 2>&1 & :將正常的運(yùn)行日志和錯誤日志合并輸入到指定日志荷逞,并在后臺運(yùn)行

shutdown.sh停服腳本媒咳,實(shí)現(xiàn)方式:找到當(dāng)前項(xiàng)目的PID,然后kill -9

PID=$(ps -ef | grep "${APPLICATION_JAR}" | grep -v grep | awk '{ print $2 }')
kill -9 ${PID}

日志記錄

項(xiàng)目啟動日志存儲路徑种远,一個(gè)項(xiàng)目只有一個(gè)啟動日志文件
logs/spring-boot-assembly_startup.log
================================================ 2018-12-12 12:36:56 ================================================
application name: spring-boot-assembly
application jar name: spring-boot-assembly.jar
application bin path: /opt/spring-boot-assembly/bin
application root path: /opt/spring-boot-assembly
application log path: /opt/spring-boot-assembly/logs/spring-boot-assembly.log
application JAVA_OPT : -server -Xms256m -Xmx256m -Xmn512m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=256m -XX:-OmitStackTraceInFastThrow
application background startup command: nohup java -server -Xms256m -Xmx256m -Xmn512m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=256m -XX:-OmitStackTraceInFastThrow -jar /opt/spring-boot-assembly/boot/spring-boot-assembly.jar --spring.config.location=/opt/spring-boot-assembly/config/ > /opt/spring-boot-assembly/logs/spring-boot-assembly.log 2>&1 &
application pid: 11596
項(xiàng)目運(yùn)行日志存儲路徑涩澡,最近一次啟動項(xiàng)目的運(yùn)行日志
logs/spring-boot-assembly.log
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.0.RELEASE)

2018-12-12 23:28:58.420  INFO 11596 --- [           main] o.s.boot.SpringApplication               : Starting application on VM_0_17_centos with PID 11596 (started by root in /opt/spring-boot-assembly)
2018-12-12 23:28:58.442  INFO 11596 --- [           main] o.s.boot.SpringApplication               : The following profiles are active: local
2018-12-12 23:29:01.355  INFO 11596 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8100 (http)
2018-12-12 23:29:01.437  INFO 11596 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-12-12 23:29:01.437  INFO 11596 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/9.0.12
2018-12-12 23:29:01.461  INFO 11596 --- [           main] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
2018-12-12 23:29:01.646  INFO 11596 --- [           main] o.a.c.c.C.[.[localhost].[/example]       : Initializing Spring embedded WebApplicationContext
2018-12-12 23:29:01.647  INFO 11596 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3028 ms
2018-12-12 23:29:01.708  INFO 11596 --- [           main] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2018-12-12 23:29:01.712  INFO 11596 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-12-12 23:29:01.712  INFO 11596 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-12-12 23:29:01.712  INFO 11596 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'formContentFilter' to: [/*]
2018-12-12 23:29:01.713  INFO 11596 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-12-12 23:29:02.250  INFO 11596 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2018-12-12 23:29:03.179  INFO 11596 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8100 (http) with context path '/example'
2018-12-12 23:29:03.182  INFO 11596 --- [           main] o.s.boot.SpringApplication               : Started application in 5.844 seconds (JVM running for 6.547)
spring.profiles.active = local
contextPath = /example
server.port = 8100
hello = Hello Local
http://localhost:8100/example/hello?name=123
項(xiàng)目歷史運(yùn)行日志存儲路徑,每啟動一次項(xiàng)目坠敷,會將之前的運(yùn)行日志移動到back目錄
`-- logs
    |-- back
    |   |-- spring-boot-assembly_back_2018-12-12-23-30-10.log
    |   `-- spring-boot-assembly_back_2018-12-12-23-36-56.log
    |-- spring-boot-assembly.log
    `-- spring-boot-assembly_startup.log
參考:
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妙同,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子膝迎,更是在濱河造成了極大的恐慌粥帚,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件限次,死亡現(xiàn)場離奇詭異芒涡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)卖漫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門费尽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人羊始,你說我怎么就攤上這事旱幼。” “怎么了突委?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵柏卤,是天一觀的道長冬三。 經(jīng)常有香客問我,道長缘缚,這世上最難降的妖魔是什么勾笆? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮忙灼,結(jié)果婚禮上匠襟,老公的妹妹穿的比我還像新娘。我一直安慰自己该园,他們只是感情好酸舍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著里初,像睡著了一般啃勉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上双妨,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天淮阐,我揣著相機(jī)與錄音,去河邊找鬼刁品。 笑死泣特,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挑随。 我是一名探鬼主播状您,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼兜挨!你這毒婦竟也來了膏孟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拌汇,失蹤者是張志新(化名)和其女友劉穎柒桑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體噪舀,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡魁淳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了与倡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片先改。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蒸走,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情貌嫡,我是刑警寧澤比驻,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布该溯,位于F島的核電站,受9級特大地震影響别惦,放射性物質(zhì)發(fā)生泄漏狈茉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一掸掸、第九天 我趴在偏房一處隱蔽的房頂上張望氯庆。 院中可真熱鬧,春花似錦扰付、人聲如沸堤撵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽实昨。三九已至,卻和暖如春盐固,著一層夾襖步出監(jiān)牢的瞬間荒给,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工刁卜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留志电,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓蛔趴,卻偏偏與公主長得像挑辆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子夺脾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

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