【问题标题】:Forking tests fail because javaOptions seems to be misconfigured分叉测试失败,因为 javaOptions 似乎配置错​​误
【发布时间】:2014-07-02 09:04:17
【问题描述】:

使用 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) 会导致整体失败?

除了Testrun 之外,我是否遗漏了一些指定的任务?

我真的很想弄清楚:)

【问题讨论】:

    标签: jvm sbt playframework-2.2 fork permgen


    【解决方案1】:

    在你的配置中

    javaOptions in (Test,run) ++= Seq(...)
    

    说配置测试和关键运行,但运行测试不是用关键运行完成的,它是用关键测试完成的,所以你已经定义了运行测试以外的设置

    javaOptions in (Test,test) ++= Seq(...)
    

    或者只是

    javaOptions in (Test) ++= Seq(...)
    

    应该能带你到那里!

    【讨论】:

    • 非常好:) 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2023-03-08
    相关资源
    最近更新 更多