今天终于找到了一个困扰我多时的Maven问题: CMD下做mvn clean install 时,在跑unit test的时候会出现OutOfMemory的错误,即使根据网上的结果在mvn.bat 里面设置了set MAVEN_OPTS=-Xmx1024m -Xms512m也不起作用。但是在RAD中却能顺利通过。
今天从此外文链接中找到了问题的答案:
http://stackoverflow.com/questions/4066424/java-lang-outofmemoryerror-java-heap-space-in-maven
原来是Maven的 maven-surefire-plugin 插件默认会fork出一个新的jvm去跑unit test, 所以上面设置的MAVEN_OPTS 并不会对surefire插件新开的jvm起作用。
两种方法来解决这个问题:
1. 把forkMode 设置为never(这不是一个好主意,因为maven不会与test隔离)
2. 使用argLine 参数(正确的做法),类似如下:
<configuration>
<argLine>-Xmx1024m</argLine>
</configuration>
但是实质上这个问题,很有可能还是unit test的内存泄露问题引起的。
------updated on 2011-12-28
今天又发现一个解决方法,将JAVA_HOME 目录指向WebSphere7.0提供的java目录,则可以完全通过