將spring framework源碼導(dǎo)入Spring Tool Suite中

轉(zhuǎn)自:http://wind-bell27.iteye.com/blog/1969930

先講基本步驟,如下:

去GitHub中下載spring framework的源碼,https://github.com/spring-projects/spring-framework/releases

下載3.2.X其中的一個(gè)版本;

安裝Gradle軟件,官網(wǎng)下載,解壓即可,設(shè)置GRADLE_HOME,和PATH。

命令行中運(yùn)行g(shù)radle -v,檢查一下是否正確安裝配置;

命令行中運(yùn)行spring framework根目錄下的import-into-eclipse.bat

連續(xù)兩次回車,就可以開始自動(dòng)構(gòu)建;

中間出現(xiàn)停止不前的情況里,按ctrl+c終止,再運(yùn)行就可以進(jìn)行下去;

過程需要花些時(shí)間(幾個(gè)小時(shí)都有可能),視下載各種依賴jar包和dom文件的速度而定;

在Eclipse菜單File->import選擇General下面的Exsiting projects into workspace,這樣就導(dǎo)入完成了。

如果你按上述步驟能一次成功的話,那不僅是你運(yùn)氣,而且RP極高。反正我沒有,而且還折騰了好多次才成功能。

問題有以下幾個(gè):

問題一:spring-framework-4.0.0.M3要用jdk1.8

如果你習(xí)憒于什么都下最新版的,那么你肯定想都沒想就下了spring-framework-4.0.0.M3,而且又那么不好采,正好沒看README,那么問題馬上就來了,直接報(bào)"-XX:MaxMetaspaceSize=1024m"及"could not create the java Virtual machine"的錯(cuò)誤。

查看build.gradle和gradlew.bat中,可以找出原因:

build.gradle中:

Java代碼

compileJava?{

sourceCompatibility=1.6

targetCompatibility=1.6

}

compileTestJava?{

sourceCompatibility=1.8

targetCompatibility=1.8

}

可以看出這個(gè)版本的test代碼要求用1.8。

gradlew.bat中

Java代碼

set?GRADLE_OPTS=-XX:MaxMetaspaceSize=1024m?-Xmx1024m?-XX:MaxHeapSize=256m?%GRADLE_OPTS%

其中-XX:MaxMetaspaceSize是1.8的寫法。

所以如果下載的是4.0的版本,最好把jdk也升級(jí)到1.8,要不就下載一下3.2.x的版本就好了。

問題2:在build過程中,出現(xiàn)heap內(nèi)存溢出情況

錯(cuò)誤信息如下:

Java代碼

FAILURE:?Build?failed?with?an?exception.

*?What?went?wrong:

Execution?failedfortask':referencePdf'.

>?GC?overhead?limit?exceeded

*?Try:

Run?with?--info?or?--debug?option?to?get?more?log?output.

*?Exception?is:

org.gradle.api.tasks.TaskExecutionException:?Execution?failedfortask?':referen

cePdf'.

at?org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex

ecuteActions(ExecuteActionsTaskExecuter.java:68)

at?org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex

ecute(ExecuteActionsTaskExecuter.java:46)

at?org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExec

uter.execute(PostExecutionAnalysisTaskExecuter.java:34)

at?org.gradle.api.internal.changedetection.CacheLockHandlingTaskExecuter

$1.run(CacheLockHandlingTaskExecuter.java:34)

at?org.gradle.internal.Factories$1.create(Factories.java:22)

at?org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(Def

aultCacheAccess.java:179)

at?org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(Def

aultCacheAccess.java:232)

at?org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunning

Operation(DefaultPersistentDirectoryStore.java:138)

at?org.gradle.api.internal.changedetection.DefaultTaskArtifactStateCache

Access.longRunningOperation(DefaultTaskArtifactStateCacheAccess.java:83)

at?org.gradle.api.internal.changedetection.CacheLockHandlingTaskExecuter

.execute(CacheLockHandlingTaskExecuter.java:32)

at?org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.exec

ute(SkipUpToDateTaskExecuter.java:55)

at?org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execut

e(ValidatingTaskExecuter.java:57)

at?org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecu

ter.execute(SkipEmptySourceFilesTaskExecuter.java:41)

at?org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter

.execute(SkipTaskWithNoActionsExecuter.java:51)

at?org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execut

e(SkipOnlyIfTaskExecuter.java:52)

at?org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter

.execute(ExecuteAtMostOnceTaskExecuter.java:42)

at?org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailur

e(AbstractTask.java:247)

at?org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.executeTask(De

faultTaskPlanExecutor.java:52)

at?org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.processTask(De

faultTaskPlanExecutor.java:38)

at?org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(Defaul

tTaskPlanExecutor.java:30)

at?org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(Defau

ltTaskGraphExecuter.java:83)

at?org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTask

ExecutionAction.java:29)

at?org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecute

r.java:61)

at?org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExec

uter.java:23)

at?org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecu

ter.java:67)

at?org.gradle.api.internal.changedetection.TaskCacheLockHandlingBuildExe

cuter$1.run(TaskCacheLockHandlingBuildExecuter.java:31)

at?org.gradle.internal.Factories$1.create(Factories.java:22)

at?org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAcc

ess.java:124)

at?org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAcc

ess.java:112)

at?org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache(De

faultPersistentDirectoryStore.java:130)

at?org.gradle.api.internal.changedetection.DefaultTaskArtifactStateCache

Access.useCache(DefaultTaskArtifactStateCacheAccess.java:79)

at?org.gradle.api.internal.changedetection.TaskCacheLockHandlingBuildExe

cuter.execute(TaskCacheLockHandlingBuildExecuter.java:29)

at?org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecute

r.java:61)

at?org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExec

uter.java:23)

at?org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecu

ter.java:67)

at?org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildEx

ecutionAction.java:32)

at?org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecute

r.java:61)

at?org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecute

r.java:54)

at?org.gradle.initialization.DefaultGradleLauncher.doBuildStages(Default

GradleLauncher.java:158)

at?org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradle

Launcher.java:113)

at?org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLaun

cher.java:81)

at?org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.jav

a:38)

at?org.gradle.launcher.exec.InProcessGradleLauncherActionExecuter.execut

e(InProcessGradleLauncherActionExecuter.java:39)

at?org.gradle.launcher.exec.InProcessGradleLauncherActionExecuter.execut

e(InProcessGradleLauncherActionExecuter.java:25)

at?org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)

at?org.gradle.api.internal.Actions$RunnableActionAdapter.execute(Actions

.java:137)

at?org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.

execute(CommandLineActionFactory.java:201)

at?org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.

execute(CommandLineActionFactory.java:174)

at?org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(

CommandLineActionFactory.java:170)

at?org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(

CommandLineActionFactory.java:139)

at?org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionRep

ortingAction.java:33)

at?org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionRep

ortingAction.java:22)

at?org.gradle.launcher.Main.doAction(Main.java:48)

at?org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)

at?org.gradle.launcher.Main.main(Main.java:39)

at?org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBoots

trap.java:50)

at?org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.j

ava:32)

at?org.gradle.launcher.GradleMain.main(GradleMain.java:26)

at?org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.ja

va:33)

at?org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130)

at?org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)

Caused?by:?java.lang.OutOfMemoryError:?GC?overhead?limit?exceeded

at?org.apache.fop.area.inline.TextArea.addWord(TextArea.java:68)

at?org.apache.fop.layoutmgr.inline.TextLayoutManager.createTextArea(Text

LayoutManager.java:483)

at?org.apache.fop.layoutmgr.inline.TextLayoutManager.addAreas(TextLayout

Manager.java:361)

at?org.apache.fop.layoutmgr.inline.LineLayoutManager.addInlineArea(LineL

ayoutManager.java:1716)

at?org.apache.fop.layoutmgr.inline.LineLayoutManager.addAreas(LineLayout

Manager.java:1568)

at?org.apache.fop.layoutmgr.BlockLayoutManager.addAreas(BlockLayoutManag

er.java:395)

at?org.apache.fop.layoutmgr.BlockLayoutManager.addAreas(BlockLayoutManag

er.java:395)

at?org.apache.fop.layoutmgr.BlockLayoutManager.addAreas(BlockLayoutManag

er.java:395)

at?org.apache.fop.layoutmgr.BlockLayoutManager.addAreas(BlockLayoutManag

er.java:395)

at?org.apache.fop.layoutmgr.AreaAdditionUtil.addAreas(AreaAdditionUtil.j

ava:121)

at?org.apache.fop.layoutmgr.FlowLayoutManager.addAreas(FlowLayoutManager

.java:305)

at?org.apache.fop.layoutmgr.PageBreaker.addAreas(PageBreaker.java:241)

at?org.apache.fop.layoutmgr.AbstractBreaker.addAreas(AbstractBreaker.jav

a:508)

at?org.apache.fop.layoutmgr.AbstractBreaker.addAreas(AbstractBreaker.jav

a:371)

at?org.apache.fop.layoutmgr.PageBreaker.doPhase3(PageBreaker.java:262)

at?org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.jav

a:346)

at?org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.jav

a:264)

at?org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout(Pag

eSequenceLayoutManager.java:106)

at?org.apache.fop.area.AreaTreeHandler.endPageSequence(AreaTreeHandler.j

ava:234)

at?org.apache.fop.fo.pagination.PageSequence.endOfNode(PageSequence.java

:123)

at?org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilde

r.java:340)

at?org.apache.fop.fo.FOTreeBuilder.endElement(FOTreeBuilder.java:169)

at?org.apache.xalan.transformer.TransformerIdentityImpl.endElement(Trans

formerIdentityImpl.java:1050)

at?org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown?Source

)

at?org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknow

n?Source)

at?org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContent

Dispatcher.dispatch(Unknown?Source)

at?org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Un

known?Source)

at?org.apache.xerces.parsers.XML11Configuration.parse(Unknown?Source)

at?org.apache.xerces.parsers.XML11Configuration.parse(Unknown?Source)

at?org.apache.xerces.parsers.XMLParser.parse(Unknown?Source)

at?org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown?Source)

at?org.apache.xalan.transformer.TransformerIdentityImpl.transform(Transf

ormerIdentityImpl.java:432)

BUILD?FAILED

那就把gradlew.bat的內(nèi)存設(shè)置調(diào)大一點(diǎn),我做實(shí)驗(yàn)時(shí),機(jī)器的內(nèi)存是8G、64位系統(tǒng),直接使用

set GRADLE_OPTS=-XX:MaxPermSize=2048m -Xmx2048m -XX:MaxHeapSize=1024m %GRADLE_OPTS%

(我下載的是spring-framework-3.2.1.RELEASE版本,jdk1.7)

問題3:gradle命令的使用

在spring源碼的根目錄下,提供gradlew.bat和

import-into-eclipse.bat這兩個(gè)命令,都可以build源碼,但如果使用前者就不會(huì)生成eclipse的環(huán)境需要的一些文件,如下圖所示:

另外,在使用import-into-eclipse.bat這個(gè)命令build時(shí),可能會(huì)遇到一個(gè)問題,錯(cuò)誤日志如下:

Java代碼

FAILURE:?Build?failed?with?an?exception.

*?What?went?wrong:

Execution?failedfortask':spring-webmvc-tiles3:eclipseClasspath'.

>?Could?not?resolve?all?dependenciesforconfiguration'detachedConfiguration2'.

>?Module?version?group:org.springframework,?module:spring-webmvc-tiles3,?vers

ion:3.2.1.RELEASE,?configuration:detachedConfiguration2?declares?a?dependency?on

configuration'runtimeMerge'which?is?not?declared?in?the?module?descriptorfor

group:org.springframework,?module:spring-web,?version:3.2.1.RELEASE

*?Try:

Run?with?--stacktrace?option?to?get?the?stack?trace.?Run?with?--info?or?--debug

option?to?get?more?log?output.

從日志中可以看出是在build spring-webmvc-tiles3項(xiàng)目時(shí),生成eclipse的.classpath文件時(shí)出錯(cuò),打開其它正常導(dǎo)入的項(xiàng)目的.classpath看下這個(gè)文件包含了哪些信息,如打開spring-aop項(xiàng)目的:

Java代碼


而spring-webmvc-tiles3下根本就沒有.classpath的影子,沒得比較,雖然上面的錯(cuò)誤日志的E文都認(rèn)識(shí),但還是看不出它在講什么,不過大體能看得出是依賴出了問題,那只能是想辦法順藤摸瓜了。重新打開build.gradle,找到有關(guān)spring-webmvc-tiles3項(xiàng)目的描述,如下:

Java代碼

project("spring-webmvc-tiles3")?{

description?="Spring?Framework?Tiles3?Integration"

merge.into?=?project(":spring-webmvc")

dependencies?{

provided(project(":spring-context"))

provided(project(":spring-web"))

provided("javax.el:el-api:1.0")

provided("javax.servlet:jstl:1.2")

provided("javax.servlet.jsp:jsp-api:2.1")

optional("org.apache.tiles:tiles-request-api:1.0.1")

optional("org.apache.tiles:tiles-api:3.0.1")

optional("org.apache.tiles:tiles-core:3.0.1")?{

exclude?group:"org.slf4j",?module:"jcl-over-slf4j"

}

optional("org.apache.tiles:tiles-servlet:3.0.1")?{

exclude?group:"org.slf4j",?module:"jcl-over-slf4j"

}

optional("org.apache.tiles:tiles-jsp:3.0.1")?{

exclude?group:"org.slf4j",?module:"jcl-over-slf4j"

}

optional("org.apache.tiles:tiles-extras:3.0.1")?{

exclude?group:"org.slf4j",?module:"jcl-over-slf4j"

}

optional("org.apache.tiles:tiles-el:3.0.1")?{

exclude?group:"org.slf4j",?module:"jcl-over-slf4j"

}

provided("javax.servlet:javax.servlet-api:3.0.1")

testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")

}

}

打開C:/Users/so/.gradle/caches/artifacts-15/filestore,挨個(gè)依賴進(jìn)行檢查,jar包倒是最下載下來了,但是"org.apache.tiles:tiles-jsp:3.0.1"、"org.apache.tiles:tiles-extras:3.0.1"、"org.apache.tiles:tiles-el:3.0.1"三個(gè)卻沒有下載到source,其它包都有jar、pom、source三個(gè)目錄,這三個(gè)沒有source目錄,只有jar、pom目錄,問題應(yīng)該是出現(xiàn)在這里。

后來終于讓我找到了這么一個(gè)東西:http://issues.gradle.org/browse/GRADLE-1157,正好證實(shí)我前面的猜想,所以按照issue中的解決辦法,在build.gradle中加上如下部分:

Java代碼

eclipseClasspath?{

downloadSources?=false;//?required?for?eclipseClasspath?to?work

}

關(guān)于spring-webmvc-tiles3項(xiàng)目的腳本、就變成這樣了:

Java代碼

project("spring-webmvc-tiles3")?{

description?="Spring?Framework?Tiles3?Integration"

merge.into?=?project(":spring-webmvc")

dependencies?{

provided(project(":spring-context"))

provided(project(":spring-web"))

provided("javax.el:el-api:1.0")

provided("javax.servlet:jstl:1.2")

provided("javax.servlet.jsp:jsp-api:2.1")

optional("org.apache.tiles:tiles-request-api:1.0.1")

optional("org.apache.tiles:tiles-api:3.0.1")

optional("org.apache.tiles:tiles-core:3.0.1")?{

exclude?group:"org.slf4j",?module:"jcl-over-slf4j"

}

optional("org.apache.tiles:tiles-servlet:3.0.1")?{

exclude?group:"org.slf4j",?module:"jcl-over-slf4j"

}

optional("org.apache.tiles:tiles-jsp:3.0.1")?{

exclude?group:"org.slf4j",?module:"jcl-over-slf4j"

}

optional("org.apache.tiles:tiles-extras:3.0.1")?{

exclude?group:"org.slf4j",?module:"jcl-over-slf4j"

}

optional("org.apache.tiles:tiles-el:3.0.1")?{

exclude?group:"org.slf4j",?module:"jcl-over-slf4j"

}

provided("javax.servlet:javax.servlet-api:3.0.1")

testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")

}

eclipseClasspath?{

downloadSources?=false;//?required?for?eclipseClasspath?to?work

}

}

重新運(yùn)行命令,這一次終于讓我看到了BUILD SUCCESSFUL的字樣了……

成功build完成后,可以看到spring目錄下的spring-webmvc-tiles3項(xiàng)目也正常生成了導(dǎo)入eclipse需要的文件。打開.classpath查看一下:

Java代碼


果然沒有sourcepath的信息。

折騰了那么久,終于到了可以看一下成果的時(shí)候了。

Spring Tool Suite說簡(jiǎn)單一點(diǎn)就是Spring家的eclipse,去官網(wǎng)下一個(gè)最新版,安裝上。

打開STS,菜單File->import選擇General下面的Exsiting projects into workspace,勾選要導(dǎo)入的子項(xiàng)目,確定即可。

成果如上,齊齊整整,沒有錯(cuò)誤,挺好!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,034評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,337評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,883評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,114評(píng)論 0 286
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,625評(píng)論 1 332
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,555評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,737評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,973評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評(píng)論 1 280
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,343評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,699評(píng)論 2 370

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