Kev*_*ith 83 out-of-memory pom.xml maven-3 maven maven-compiler-plugin
截至今天,我的maven编译失败了.
[INFO] [ERROR] Unexpected
[INFO] java.lang.OutOfMemoryError: Java heap space
[INFO] at java.util.Arrays.copyOfRange(Arrays.java:2694)
[INFO] at java.lang.String.<init>(String.java:203)
[INFO] at java.lang.String.substring(String.java:1877)
Run Code Online (Sandbox Code Playgroud)
[错误]内存不足; 要增加内存量,请在启动时使用-Xmx标志(java -Xmx128M ...)
截至昨天,我已成功运行maven编译.
截至今天,我刚刚把我的堆增加到3 GB.另外,我只更改了2-3行代码,所以我不明白这个"内存不足"的错误.
vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS
-Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m
Run Code Online (Sandbox Code Playgroud)
编辑:我通过更改失败的模块的pom.xml尝试了海报的评论.但我得到了相同的maven构建错误.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
<fork>true</fork>
<meminitial>1024m</meminitial>
<maxmem>2024m</maxmem>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
小智 127
您在谈论什么样的"网络"模块?这是一场简单的战争还有包装类型的战争?
如果您没有使用Google的网络工具包(GWT),那么您不需要提供任何服务 gwt.extraJvmArgs
分配编译过程可能不是最好的主意,因为那时你开始第二个过程忽略MAVEN_OPTS并使分析更加困难.
所以我会尝试通过设置MAVEN_OPTS来增加Xmx
export MAVEN_OPTS="-Xmx3000m"
Run Code Online (Sandbox Code Playgroud)
并且不要将编译器分叉到不同的进程
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
MAVEN_OPTS不应该增加,因为如果perm sice是问题的原因,那么我会期待错误-XX:MaxPermSize=512m
如果这不能解决您的问题,那么您可以通过添加创建堆转储以进行进一步分析java.lang.OutOfMemoryError: PermGen space.此外,您可以在java的bin目录中使用jconsole.exe在编译运行时连接到jvm,并查看jvm堆中的内容.
另一个想法(可能是一个愚蠢的想法)出现在我面前,你的机器里面有足够的内存吗?定义内存大小很好但是如果你的主机只有4GB,那么你可能会遇到Java无法使用已定义内存的问题,因为它已经被操作系统,Java,MS-Office ...使用了.
A_D*_*teo 32
回答提及另一个选项而不是MAVEN_OPTS传递给Maven 的公共环境变量构建所需的JVM选项.
从Maven 3.3.1开始,您可以将.mvn文件夹作为相关项目的一部分,将jvm.config文件作为此类选项的完美位置.
两个新的可选配置文件
.mvn/jvm.config,并.mvn/maven.config位于项目的源代码树的根目录.如果存在,这些文件将提供默认的jvm和maven选项.由于这些文件是项目源代码树的一部分,因此它们将出现在所有项目检出中,并且每次构建项目时都会自动使用.
作为官方发行说明的一部分
在Maven中,在每个项目基础上定义JVM配置并不简单.基于环境变量
MAVEN_OPTS和使用的现有机制${user.home}/.mavenrc是另一种选择,其缺点是不属于项目的一部分.从此版本开始,您可以通过
${maven.projectBasedir}/.mvn/jvm.config文件定义JVM配置,这意味着您可以在每个项目基础上定义构建的选项.此文件将成为项目的一部分,并将与您的项目一起签入.因此,没有必要再进行MAVEN_OPTS,.mavenrc文件.例如,如果您将以下JVM选项放入${maven.projectBasedir}/.mvn/jvm.config文件中:Run Code Online (Sandbox Code Playgroud)-Xmx2048m -Xms1024m -XX:MaxPermSize=512m -Djava.awt.headless=true
这种方法的主要优点是配置与相关项目隔离并应用于整个构建,并且比MAVEN_OPTS在同一项目中工作的其他开发人员(忘记设置它)更不易碎.
此外,在多模块项目的情况下,选项将应用于所有模块.
m3n*_*nda 14
尝试使用Lowend 512Mb ram VPS和良好的CPU编译"干净安装"时遇到同样的问题.运行OutOfMemory并重复杀死脚本.
我用过export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=350m"和工作过.
仍然得到一些其他编译失败,因为这是我第一次需要Maven,但OutOfMemory问题已经消失.
Ily*_*lya 11
添加选项
-XX:MaxPermSize=512m
Run Code Online (Sandbox Code Playgroud)
到MAVEN_OPTS
maven-compiler-plugin 选项
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<fork>true</fork>
<meminitial>1024m</meminitial>
<maxmem>2024m</maxmem>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我在编译 Druid.io 时遇到了同样的问题,增加 MaxDirectMemorySize 终于奏效了。
export MAVEN_OPTS="-Xms8g -Xmx8g -XX:MaxDirectMemorySize=4096m"
Run Code Online (Sandbox Code Playgroud)
下面的配置适用于我的情况
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<argLine>-XX:MaxPermSize=500M</argLine>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
尝试使用 -XX:MaxPermSize 而不是 -XX:MaxPermGen
| 归档时间: |
|
| 查看次数: |
189174 次 |
| 最近记录: |