簡體   English   中英

SBT測試中的奇怪異常

[英]Strange exception in SBT test

我遇到SBT(0.13.9版)問題。 我的一個ScalaTest測試無法通過EOFException確定性失敗。

堆棧跟蹤:

Exception in thread "Thread-155" Exception in thread "Thread-159" java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2601)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1319)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at sbt.React.react(ForkTests.scala:114)
at sbt.ForkTests$$anonfun$mainTestTask$1$Acceptor$2$.run(ForkTests.scala:74)
at java.lang.Thread.run(Thread.java:745)

java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2601)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1319)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at org.scalatest.tools.Framework$ScalaTestRunner$Skeleton$1$React.react(Framework.scala:953)
at org.scalatest.tools.Framework$ScalaTestRunner$Skeleton$1.run(Framework.scala:942)
at java.lang.Thread.run(Thread.java:745)

sbt.ForkMain 59974 failed with exit code 134

我沒有看到任何JVM日志或線程轉儲。

SBT單線程或多線程測試會分叉JVM,並且如果主機名未解析,它將失敗並顯示此錯誤消息。 如果查看測試中的日志,可能會看到

運行測試時未捕獲的異常:java.net.ConnectException:操作超時

因此,解決此問題的簡單方法是將您的主機名添加到/ etc / hosts並將其映射到localhost,如下所示

:: 1本地主機blahblah

這樣可以解決問題。

幾乎可以肯定,這與某些Linux發行版中調用sbt.ForkMain時Java類路徑太長有關。 為了避免這種情況,我添加了

javaOptions in Test ++= Seq("-Xms1G","-XX:+CMSClassUnloadingEnabled","-XX:+UseConcMarkSweepGC")

build.sbt文件。 我認為CMSClassUnloadingEnabled是發生魔術的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM