使用Play 2.X,我希望我的测试默认是分叉的(Play 2.X的新方式),特别是运行良好。
但是,在Build.scala
中使用此SBT配置时,由于permgen空间,我会观察到OOM,如下所示:
Uncaught exception when running myspecs.AllSpecs: java.lang.OutOfMemoryError: PermGen space
sbt.ForkMain$ForkError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at scala.collection.parallel.immutable.LazyParVectorCombiner.result(ParVector.scala:129)
at scala.collection.parallel.immutable.LazyParVectorCombiner.result(ParVector.scala:105)
at scala.collection.Parallelizable$class.par(Parallelizable.scala:42)
at scala.collection.AbstractTraversable.par(Traversable.scala:105)
at org.specs2.reporter.AllExporting$$anonfun$export$1$$anonfun$2.apply(AllExporting.scala:28)
at org.specs2.reporter.AllExporting$$anonfun$export$1$$anonfun$2.apply(AllExporting.scala:27)
at scalaz.syntax.IdOps$class.$bar$greater(IdOps.scala:15)
at scalaz.syntax.ToIdOps$$anon$1.$bar$greater(IdOps.scala:82)
at org.specs2.reporter.AllExporting$$anonfun$export$1.apply(AllExporting.scala:32)
at org.specs2.reporter.AllExporting$$anonfun$export$1.apply(AllExporting.scala:24)
at scalaz.syntax.IdOps$class.$bar$greater(IdOps.scala:15)
at scalaz.syntax.ToIdOps$$anon$1.$bar$greater(IdOps.scala:82)
at org.specs2.reporter.AllExporting$class.report(AllExporting.scala:17)
at org.specs2.reporter.SbtConsoleReporter.report(SbtReporter.scala:20)
at org.specs2.runner.SbtRunner.org$specs2$runner$SbtRunner$$specificationRun(SbtRunner.scala:75)
at org.specs2.runner.SbtRunner$$anonfun$newTask$1$$anon$5.execute(SbtRunner.scala:59)
at sbt.ForkMain$Run.runTest(ForkMain.java:239)
at sbt.ForkMain$Run.runTestSafe(ForkMain.java:211)
at sbt.ForkMain$Run.runTests(ForkMain.java:187)
at sbt.ForkMain$Run.run(ForkMain.java:251)
我的配置如下:
- 我的ApplicationBuild.scala
在场here
- 我的plugins.sbt存在here
- 我的build.properties存在here
但如果我改变这一行:
javaOptions in (Test,run) ++= Seq("-Xms512M", "-Xmx2048M", "-XX:MaxPermSize=2048M", "-XX:+CMSClassUnloadingEnabled")
这一行:
javaOptions ++= Seq("-Xms512M", "-Xmx2048M", "-XX:MaxPermSize=2048M", "-XX:+CMSClassUnloadingEnabled")
整个作品。
为什么指定(Test, run)
会导致整体失败?
我是否遗漏了Test
和run
以外的一些指定任务?
我真的很想弄明白:)
答案 0 :(得分:1)
在您的配置中
javaOptions in (Test,run) ++= Seq(...)
表示配置测试和密钥运行,但运行测试不是通过密钥运行完成的,而是通过密钥测试完成的,因此您已经定义了除运行测试之外的其他设置
javaOptions in (Test,test) ++= Seq(...)
或只是
javaOptions in (Test) ++= Seq(...)
应该让你到那儿!