SBT测试中的奇怪异常

时间:2015-10-22 17:51:57

标签: scala sbt scalatest

我正面临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日志或线程转储。

2 个答案:

答案 0 :(得分:3)

SBT单线程或多线程测试会分叉JVM,如果主机名未解析,则只会失败,并显示此错误消息。如果查看测试中的日志,可能会看到

  

运行测试时未捕获的异常:java.net.ConnectException:操作超时

因此,解决此问题的简单方法是将您的主机名添加到/ etc / hosts并将其映射到localhost,如下所示

:: 1 localhost blahblah

这应解决问题。

答案 1 :(得分:1)

在某些Linux发行版中调用sbt.ForkMain时,这几乎与Java类路径太长有关。为了避免这种情况,我添加了

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

build.sbt文件。我认为CMSClassUnloadingEnabled是神奇发生的地方。