Scala maven插件没有';t使用StackOverflowerr编译
我在maven项目中发现了一个与Scala maven插件相关的bug。我有一个非常长的特征序列(用于机器学习目的),我手工编码(74个元素) 我在序列中添加了一个元素,它不再编译了。如果我对这个序列中的任何元素进行注释,元素的数量就会减少,它就会编译 有关更多信息,以下是我编译的最终结果:Scala maven插件没有';t使用StackOverflowerr编译,scala,maven,scala-maven-plugin,Scala,Maven,Scala Maven Plugin,我在maven项目中发现了一个与Scala maven插件相关的bug。我有一个非常长的特征序列(用于机器学习目的),我手工编码(74个元素) 我在序列中添加了一个元素,它不再编译了。如果我对这个序列中的任何元素进行注释,元素的数量就会减少,它就会编译 有关更多信息,以下是我编译的最终结果: [ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.3.1:compile (default) on project
[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.3.1:compile (default) on project SecretProject: wrap: org.apache.commons.exec.ExecuteException: Process exited with an error: 240 (Exit value: 240) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
加上StackTrace的最开始部分:
[INFO] Compiling 13 source files to /home/belka/Bureau/SecretProject/target/classes at 1513759339071
[ERROR] error: java.lang.StackOverflowError
[INFO] at scala.reflect.internal.TreeInfo.isSelfConstrCall(TreeInfo.scala:296)
[INFO] at scala.reflect.internal.TreeInfo.isSelfOrSuperConstrCall(TreeInfo.scala:344)
[INFO] at scala.reflect.internal.Trees$UnderConstructionTransformer$class.transform(Trees.scala:1701)
[INFO] at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:291)
[INFO] at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:457)
[INFO] at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:352)
[INFO] at scala.reflect.internal.Trees$class.itransform(Trees.scala:1345)
(修改项目名称)
- 有没有人在Scala maven插件中遇到过类似的问题
parser(在编译器中)对序列解析有任何类型的硬限制吗scalamaven插件
- 如何解决它并编译我的项目
- 为什么它可以使用IntelliJ编译(“播放”按钮),而不能使用Maven编译
Scala maven插件的pom.xml片段
片段:
<plugin>
<!-- see http://davidb.github.com/scala-maven-plugin -->
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.3.1</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
<configuration>
<args>
<arg>-dependencyfile</arg>
<arg>${project.build.directory}/.scala_dependencies</arg>
</args>
<jvmArgs>
<jvmArg>-Xms512m</jvmArg>
<jvmArg>-Xmx4096m</jvmArg>
</jvmArgs>
</configuration>
</execution>
</executions>
</plugin>
net.alchim31.maven
scala maven插件
3.3.1
编写
测试编译
-从属文件
${project.build.directory}/.scala\u依赖项
-Xms512m
-Xmx4096m
按顺序回答您的问题:
- 对。有关问题和解决方案,请参阅
- JVM有一个堆栈限制,现在我推测一下,但是在解析代码时通常使用堆栈,如果它是递归的(oivey),那么解析很长的序列将占用更多的堆栈内存是有道理的。显然,在maven和scala解析器的内存使用情况下,它太多了
- 要解决这个问题,请参阅上面的链接
- 可能就像我上面提到的那样,maven比intellij有更多的堆栈内存消耗。编辑:我认为这更可能取决于编译器进程是如何启动的,如果我没有弄错的话,它可能具有不同的堆栈状态
- 对。有关问题和解决方案,请参阅
- JVM有一个堆栈限制,现在我推测一下,但是在解析代码时通常使用堆栈,如果它是递归的(oivey),那么解析很长的序列将占用更多的堆栈内存是有道理的。显然,在maven和scala解析器的内存使用情况下,它太多了
- 要解决这个问题,请参阅上面的链接
- 可能就像我上面提到的那样,maven比intellij有更多的堆栈内存消耗。编辑:我认为这更可能取决于编译器进程是如何启动的,如果我没有弄错的话,它可能具有不同的堆栈状态
- 反递归您的代码或使用尾部递归
- 或者通过
-Xss
<jvmArgs> <jvmArg>-Xss4m</jvmArg> <jvmArg>-Xms512m</jvmArg> <jvmArg>-Xmx4096m</jvmArg> </jvmArgs>
-Xss4m -Xms512m -Xmx4096m
- 反递归您的代码或使用尾部递归
- 或者通过
-Xss
<jvmArgs> <jvmArg>-Xss4m</jvmArg> <jvmArg>-Xms512m</jvmArg> <jvmArg>-Xmx4096m</jvmArg> </jvmArgs>
-Xss4m -Xms512m -Xmx4096m
- 您可以:
我想IDEA已经增加了默认的最大堆栈大小(64位虚拟机中的iirc 1024k)。会出现什么错误?请给出一个重现该问题的小示例。我添加了有关堆栈跟踪的信息+为了重现该问题,您可以创建一个包含74个手动添加元素的序列,然后在第75次时它将不再编译。我尝试创建一个包含200个手动添加元素的序列,效果很好。请提供一个最小的、可验证的和完整的示例,以便我们可以重现您的问题。感谢您的回答和时间。你能给我你的jdk版本吗?您是否尝试过使用maven编译?能否将pom.xml片段与scala maven插件的配置共享?会出现什么错误?请给出一个重现该问题的小示例。我添加了有关堆栈跟踪的信息+为了重现该问题,您可以创建一个包含74个手动添加元素的序列,然后在第75次时它将不再编译。我尝试创建一个包含200个手动添加元素的序列,效果很好。请提供一个最小的、可验证的和完整的示例,以便我们可以重现您的问题。感谢您的回答和时间。你能给我你的jdk版本吗?您是否尝试过使用maven进行编译?能否将pom.xml片段与scala maven插件的配置共享?我看到了建议的解决方案,但这不适合我的问题。编译阶段需要占用我4-5%的内存…@belka你有可用内存还是JVM的堆栈大小内存?堆栈大小是有限的,无论可用的系统内存。我的可用内存;JVM堆栈大小设置为4096M,远远高于消耗的memory@belka更正4096M不是您的最大堆栈大小,而是您的最大“堆”内存我看到了建议的解决方案,但是这不适合我的问题。编译阶段需要占用我4-5%的内存…@belka你有可用内存还是JVM的堆栈大小内存?堆栈大小是有限的,无论可用的系统内存。我的可用内存;JVM堆栈大小设置为4096M,远远高于消耗的memory@belka更正4096M不是您的最大堆栈大小,而是您的最大“堆”内存库!这解决了我的问题。您是否有任何文档说明您是如何找到此解决方案的,或者为什么它解决了我的问题?为什么这么小的堆大小就足够了?Xss表示堆栈大小,Xms/Xmn表示堆大小(4G不是小堆大小)。您可以搜索堆栈大小和堆大小之间的差异(对于jvm)。我找到了解决办法,是吗