如何發(fā)布Jar包到Maven中央倉庫

本文系轉(zhuǎn)載,原文地址:

https://www.iteblog.com/archives/1807.html


本博客曾經(jīng)介紹了《如何手動(dòng)添加依賴的jar文件到本地Maven倉庫》這里的方法非常的簡(jiǎn)單,而且局限性很大:只能提供給本人開發(fā)使用,無法共享給其他需要的人。本文將介紹如何把自己開發(fā)出來的Java包發(fā)布到Maven中央倉庫(http://search.maven.org/)冀惭,這樣任何人都可以搜索到這個(gè)包并使用它。如果你現(xiàn)在還不了解Maven是啥東西,請(qǐng)你先找本Maven書看看可柿。

將自己的Java包發(fā)布到Maven中央倉庫需要經(jīng)過許多繁瑣的步驟,本文將詳細(xì)地介紹這些步驟丙者。相信大家在看完本文之后也會(huì)發(fā)布jar包到Maven中央倉庫复斥。

文章目錄

創(chuàng)建工單

在發(fā)布Java包到Maven中央倉庫首先需要在https://issues.sonatype.org/secure/Dashboard.jspa網(wǎng)站創(chuàng)建一個(gè)工單(Issues),第一次使用這個(gè)網(wǎng)站的時(shí)候需要注冊(cè)自己的帳號(hào)(這個(gè)帳號(hào)和密碼需要記住械媒,后面會(huì)用到)目锭,之后創(chuàng)建自己的Issue评汰,點(diǎn)擊導(dǎo)航最上面的Create按鈕,然后會(huì)彈出下面的對(duì)話框痢虹,將ProjectIssue Type設(shè)置為下圖的內(nèi)容:


如果想及時(shí)了解Spark被去、Hadoop或者Hbase相關(guān)的文章,歡迎關(guān)注微信公共帳號(hào):iteblog_hadoop

然后根據(jù)你Java包的功能分別寫上Summary奖唯、Description惨缆、Group IdSCM url以及Project URL等必要信息丰捷,可以參見我之前創(chuàng)建的Issue:https://issues.sonatype.org/browse/OSSRH-24874坯墨。創(chuàng)建完之后需要等待Sonatype的工作人員審核處理,審核時(shí)間還是很快的病往,我的審核差不多等待了兩小時(shí)捣染。當(dāng)Issue的Status變?yōu)?code>RESOLVED后,就可以進(jìn)行下一步操作了停巷。

如果你的Group Id填寫的是自己的網(wǎng)站(我的就是這種情況)耍攘,Sonatype的工作人員會(huì)詢問你那個(gè)Group Id是不是你的域名,你只需要在上面回答是就行畔勤,然后就會(huì)通過審核少漆。

使用gpg生成密鑰對(duì)

上面創(chuàng)建的issuce經(jīng)過審核之后,我們可以使用gpg生成密鑰對(duì)硼被,這里分兩種情況:

1示损、如果使用的是Windows,可以到https://www.gpg4win.org/download.html下載gpg4win嚷硫,推薦使用 Gpg4win-Vanilla 2.3.3版本检访,因?yàn)樗鼉H包括 GnuPG,這個(gè)工具才是我們所需要的仔掸;

2脆贵、如果使用的是Linux,可以通過yum install gpg命令安裝gpg起暮。

之后可以通過gpg --version命令查看是否安裝成功卖氨,如果出現(xiàn)版本等信息說明安裝成功了,如下:

<pre class="brush: bash; title: ; notranslate" title="" style="padding: 8px; color: rgb(51, 51, 51); border-radius: 3px; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; display: block; margin: 0px 0px 10px; line-height: 20px; word-break: break-all; overflow-wrap: break-word; white-space: pre-wrap; background-color: rgb(248, 248, 248); border: 1px solid rgb(238, 238, 238); overflow: hidden; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">[iteblog@www.iteblog.com ~] $ gpg --version
gpg (GnuPG) 2.0.14
libgcrypt 1.4.5
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA
Cipher: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128,
CAMELLIA192, CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
</pre>

安裝完gpg之后负懦,下面一次按照如下的命令設(shè)置好你的名字筒捺,郵箱,其他步驟可以使用默認(rèn)值纸厉。不過輸入Passphrase的值需要記住系吭,這個(gè)相當(dāng)于密鑰的密碼,發(fā)布過程中進(jìn)行簽名操作的時(shí)候會(huì)用到:

<pre class="brush: bash; title: ; notranslate" title="" style="padding: 8px; color: rgb(51, 51, 51); border-radius: 3px; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; display: block; margin: 0px 0px 10px; line-height: 20px; word-break: break-all; overflow-wrap: break-word; white-space: pre-wrap; background-color: rgb(248, 248, 248); border: 1px solid rgb(238, 238, 238); overflow: hidden; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">$ gpg --gen-key
gpg (GnuPG) 1.4.19; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection?
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) Y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) heinrichh@duesseldorf.de"

Real name: iteblog
Email address: wyphao.2007@163.com
Comment: flink-elasticsearch-connector
You selected this USER-ID:
"iteblog (flink-elasticsearch-connector) wyphao.2007@163.com"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
+++++
.+++++
gpg: /c/Users/iteblog/.gnupg/trustdb.gpg: trustdb created
gpg: key B15C5AA3 marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
pub 2048R/B15C5AA3 2016-09-19
Key fingerprint = DB61 9873 924C 020E 20E7 E461 0170 C912 B15C 5AA3
uid iteblog (flink-elasticsearch-connector) wyphao.2007@163.com
sub 2048R/31A906E1 2016-09-19
</pre>

到這里我們就設(shè)置好密鑰對(duì)了颗品。上面代碼中導(dǎo)數(shù)第四行的B15C5AA3需要記住肯尺,其相當(dāng)于我們生成的key沃缘,后面會(huì)用到。

設(shè)置Maven配置

為了發(fā)布更簡(jiǎn)便则吟,我們可以工程的pom.xml文件里面加入以下的配置:

<pre class="brush: xml; title: ; notranslate" title="" style="padding: 8px; color: rgb(51, 51, 51); border-radius: 3px; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; display: block; margin: 0px 0px 10px; line-height: 20px; word-break: break-all; overflow-wrap: break-word; white-space: pre-wrap; background-color: rgb(248, 248, 248); border: 1px solid rgb(238, 238, 238); overflow: hidden; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>7</version>
</parent>
</pre>

并增加Licenses槐臀、SCM、Developers信息:

<pre class="brush: xml; title: ; notranslate" title="" style="padding: 8px; color: rgb(51, 51, 51); border-radius: 3px; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; display: block; margin: 0px 0px 10px; line-height: 20px; word-break: break-all; overflow-wrap: break-word; white-space: pre-wrap; background-color: rgb(248, 248, 248); border: 1px solid rgb(238, 238, 238); overflow: hidden; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>

<scm>
<url>https://github.com/397090770/flink-elasticsearch2-connector</url>
<connection>git@github.com:397090770/flink-elasticsearch2-connector.git</connection>
<developerConnection>https://www.iteblog.com</developerConnection>
</scm>

<developers>
<developer>
<name>iteblog</name>
<email>wyphao.2007@163.com</email>
<url>https://www.iteblog.com</url>
</developer>
</developers>
</pre>

最后修改Maven的setting.xml配置文件氓仲,設(shè)置如下:

<pre class="brush: xml; title: ; notranslate" title="" style="padding: 8px; color: rgb(51, 51, 51); border-radius: 3px; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; display: block; margin: 0px 0px 10px; line-height: 20px; word-break: break-all; overflow-wrap: break-word; white-space: pre-wrap; background-color: rgb(248, 248, 248); border: 1px solid rgb(238, 238, 238); overflow: hidden; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><servers>
<server>
<id>sonatype-nexus-snapshots</id>
<username>Sonatype網(wǎng)站的賬號(hào)</username>
<password>Sonatype網(wǎng)站的密碼</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>Sonatype網(wǎng)站的賬號(hào)</username>
<password>Sonatype網(wǎng)站的密碼</password>
</server>
</servers>
</pre>

上面的username和password就是你在步驟一注冊(cè)的帳號(hào)和密碼峰档。

部署和發(fā)布Jar包

配置好pom.xml文件和Maven的setting.xml文件之后,我們就可以部署Jar包了寨昙,運(yùn)行如下命令:

<pre class="brush: bash; title: ; notranslate" title="" style="padding: 8px; color: rgb(51, 51, 51); border-radius: 3px; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; display: block; margin: 0px 0px 10px; line-height: 20px; word-break: break-all; overflow-wrap: break-word; white-space: pre-wrap; background-color: rgb(248, 248, 248); border: 1px solid rgb(238, 238, 238); overflow: hidden; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">$ mvn clean deploy -P sonatype-oss-release -Darguments="gpg.passphrase=設(shè)置gpg設(shè)置密鑰時(shí)候輸入的Passphrase"
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building flink-elasticsearch2-connector 1.0.1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ flink-elasticsearch2-connector ---
[INFO] Deleting D:\work\flink-elasticsearch2-connector\target
[INFO]
[INFO] --- maven-enforcer-plugin:1.0:enforce (enforce-maven) @ flink-elasticsearch2-connector ---
[INFO]
[INFO] --- maven-source-plugin:2.1.2:jar-no-fork (attach-sources) @ flink-elasticsearch2-connector ---
[INFO]
[INFO] --- maven-javadoc-plugin:2.7:jar (attach-javadocs) @ flink-elasticsearch2-connector ---
[INFO] Not executing Javadoc as the project is not a Java classpath-capable package
[INFO]
[INFO] --- maven-gpg-plugin:1.1:sign (sign-artifacts) @ flink-elasticsearch2-connector ---
GPG Passphrase: ***************** *[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ flink-elasticsearch2-connector ---
[INFO] Installing D:\work\flink-elasticsearch2-connector\pom.xml to D:\q\repos\com\iteblog\flink-elasticsearch2-connector\1.0.1\flink-elasticsearch2-connector-1.0.1.pom
[INFO] Installing D:\work\flink-elasticsearch2-connector\target\flink-elasticsearch2-connector-1.0.1.pom.asc to D:\q\repos\com\iteblog\flink-elasticsearch2-connector\1.0.1\flink-elasticsearch2-connector-1.0.1.pom.asc
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ flink-elasticsearch2-connector ---
Uploading: https://oss.sonatype.org/service/local/staging/deploy/maven2/com/iteblog/flink-elasticsearch2-connector/1.0.1/flink-elasticsearch2-connector-1.0.1.pom
Uploaded: https://oss.sonatype.org/service/local/staging/deploy/maven2/com/iteblog/flink-elasticsearch2-connector/1.0.1/flink-elasticsearch2-connector-1.0.1.pom (4 KB at 0.4 KB/sec)
Downloading: https://oss.sonatype.org/service/local/staging/deploy/maven2/com/iteblog/flink-elasticsearch2-connector/maven-metadata.xml
Uploading: https://oss.sonatype.org/service/local/staging/deploy/maven2/com/iteblog/flink-elasticsearch2-connector/maven-metadata.xml
Uploaded: https://oss.sonatype.org/service/local/staging/deploy/maven2/com/iteblog/flink-elasticsearch2-connector/maven-metadata.xml (321 B at 0.0 KB/sec)
Uploading: https://oss.sonatype.org/service/local/staging/deploy/maven2/com/iteblog/flink-elasticsearch2-connector/1.0.1/flink-elasticsearch2-connector-1.0.1.pom.asc
Uploaded: https://oss.sonatype.org/service/local/staging/deploy/maven2/com/iteblog/flink-elasticsearch2-connector/1.0.1/flink-elasticsearch2-connector-1.0.1.pom.asc (473 B at 0.1 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 34.272s
[INFO] Finished at: Mon Sep 19 14:15:21 CST 2016
[INFO] Final Memory: 21M/224M
[INFO] ------------------------------------------------------------------------
</pre>

運(yùn)行上面的命令之后,我們?cè)偕蟼鞯降谌降膋ey驗(yàn)證庫掀亩,如下:

<pre class="brush: bash; title: ; notranslate" title="" style="padding: 8px; color: rgb(51, 51, 51); border-radius: 3px; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; display: block; margin: 0px 0px 10px; line-height: 20px; word-break: break-all; overflow-wrap: break-word; white-space: pre-wrap; background-color: rgb(248, 248, 248); border: 1px solid rgb(238, 238, 238); overflow: hidden; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">$ gpg --list-keys
/c/Users/iteblog/.gnupg/pubring.gpg


pub 2048R/B15C5AA3 2016-09-19
uid iteblog (flink-elasticsearch-connector) wyphao.2007@163.com
sub 2048R/31A906E1 2016-09-19

iteblog@iteblog MINGW64 /d/work/flink-elasticsearch2-connector (master)
$ gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys B15C5AA3
gpg: sending key B15C5AA3 to hkp server keyserver.ubuntu.com
</pre>

之后我們的Java包將會(huì)發(fā)布到sonatype的構(gòu)件倉庫中舔哪,可以到https://oss.sonatype.org/#stagingRepositories查看發(fā)布好的Jar。進(jìn)入之后會(huì)看到中間一個(gè)Table窗口槽棍,將滑動(dòng)條移到最后捉蚤,找到我們剛剛發(fā)布的Jar包,然后依次點(diǎn)擊上方的Close–>Confirm炼七,這將會(huì)彈出類似于下面的對(duì)話框缆巧,在其中輸入我們Jar包的描述信息,這個(gè)信息將會(huì)在Maven搜索結(jié)果當(dāng)作簡(jiǎn)介介紹我們Jar包的豌拙,所以建議輸?shù)脑敿?xì)點(diǎn)陕悬。


如果想及時(shí)了解Spark、Hadoop或者Hbase相關(guān)的文章按傅,歡迎關(guān)注微信公共帳號(hào):iteblog_hadoop

當(dāng)狀態(tài)變成closed后捉超,執(zhí)行Release–>Confirm,同樣會(huì)彈出一個(gè)類似于上面的對(duì)話框唯绍,我們還是輸入那些介紹信息即可拼岳,當(dāng)這步執(zhí)行完之后,構(gòu)件將會(huì)自動(dòng)刪除况芒,并經(jīng)過幾小時(shí)后便可以在Maven中央倉庫搜索到(http://search.maven.org)惜纸。如下:


如果想及時(shí)了解Spark、Hadoop或者Hbase相關(guān)的文章绝骚,歡迎關(guān)注微信公共帳號(hào):iteblog_hadoop

mvnrepository網(wǎng)站的顯示:


如果想及時(shí)了解Spark耐版、Hadoop或者Hbase相關(guān)的文章,歡迎關(guān)注微信公共帳號(hào):iteblog_hadoop

升級(jí)Jar包

我們開發(fā)的Jar包在后面可能需要更新压汪,比如從1.0.1版本升級(jí)到1.0.2版本椭更。升級(jí)Jar包比初次發(fā)布的步驟簡(jiǎn)單的多,我們只需要更新項(xiàng)目工程代碼蛾魄,并修改pom.xml文件里面的版本號(hào)虑瀑,最后重新執(zhí)行上面的部署和發(fā)布Jar包步驟即可湿滓。

本博客文章除特別聲明,全部都是原創(chuàng)舌狗!
轉(zhuǎn)載本文請(qǐng)加上:轉(zhuǎn)載自過往記憶(https://www.iteblog.com/)
本文鏈接: 【如何發(fā)布Jar包到Maven中央倉庫】(https://www.iteblog.com/archives/1807.html)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末叽奥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子痛侍,更是在濱河造成了極大的恐慌朝氓,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件主届,死亡現(xiàn)場(chǎng)離奇詭異赵哲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)君丁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門枫夺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绘闷,你說我怎么就攤上這事橡庞。” “怎么了印蔗?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵扒最,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我华嘹,道長(zhǎng)吧趣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任耙厚,我火速辦了婚禮再菊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘颜曾。我一直安慰自己纠拔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布泛豪。 她就那樣靜靜地躺著稠诲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诡曙。 梳的紋絲不亂的頭發(fā)上臀叙,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音价卤,去河邊找鬼劝萤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛慎璧,可吹牛的內(nèi)容都是我干的床嫌。 我是一名探鬼主播跨释,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼厌处!你這毒婦竟也來了鳖谈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤阔涉,失蹤者是張志新(化名)和其女友劉穎缆娃,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瑰排,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贯要,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了椭住。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崇渗。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖函荣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扳肛,我是刑警寧澤傻挂,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站挖息,受9級(jí)特大地震影響金拒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜套腹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一绪抛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧电禀,春花似錦幢码、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至政基,卻和暖如春贞铣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沮明。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工辕坝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荐健。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓酱畅,卻偏偏與公主長(zhǎng)得像琳袄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子圣贸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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