我正面临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日志或线程转储。
答案 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
是神奇发生的地方。