我的 Scala 项目(Maven 管理的)无法在 Travis 上构建,抛出 GC overhead limit exceeded
尽管使用相同的 MAVEN_OPTS=-Xmx3g -XX:MaxPermSize=512m
在本地编译良好,但仍出错.我怀疑 Travis 以某种方式忽略了我的 MAVEN_OPTS
:当我尝试针对 Oracle JDK 8 进行测试时,Travis 记录:
$ Setting environment variables from .travis.yml
$ export MAVEN_OPTS="-XX:MaxPermSize=512m -Xmx3g"
这看起来不错。但是,在它记录后不久:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=192m; support was removed in 8.0
这是令人不安的,因为我没有指定
-XX:MaxPermSize=192m
, 仅 512m
. (这让我相信我的 -Xmx3g
也被忽略了,导致编译失败。)我尝试指定
MAVEN_OPTS
在我的 pom 中的许多其他地方,都无济于事。例如,对于 maven-scala-plugin,我有:<configuration>
...
<jvmArgs>
<jvmArg>-Xmx3g</jvmArg>
<jvmArg>-XX:MaxPermSize=512m</jvmArg>
</jvmArgs>
</configuration>
而且我在 maven-surefire-plugin 和 scalatest 插件下还有以下内容,尽管构建在编译期间失败,而不是测试:
<configuration>
<argLine>-Xmx3g -XX:MaxPermSize=512m</argLine>
</configuration>
以下是我的 .travis.yml 的全部内容:
language: java
env:
global:
- MAVEN_OPTS="-XX:MaxPermSize=512m -Xmx3g"
script: mvn clean install
jdk:
- oraclejdk8
- oraclejdk7
我正在使用 Scala 2.11.2 和 scala-maven-plugin 3.2.0。
最佳答案
更新 (11/2/15):
终于彻底解决了here .引用:
如果您想使用基于容器的构建(不依赖于 sudo),您可以将您想要的内容回显到 $HOME/.mavenrc
文件,这将优先于 /etc/mavenrc
,像这样:
在 .travis.yml
:
before_script:
- echo "MAVEN_OPTS='-Xmx2g -XX:MaxPermSize=512m'" > ~/.mavenrc
(你也可以把它放在
before_install
中,这取决于你的设置)。旧答案:
我终于找到了答案here ,其中引用了 this (closed but not resolved) issue在 Travis CI github 上。
似乎 Travis 导出了一个
MAVEN_OPTS
环境变量作为 root 通过文件 /etc/mavenrc
,然后不会被任何其他 MAVEN_OPTS
覆盖定义(例如,通过 travis 配置中的 env/global 设置)。解决方法是删除 /etc/mavenrc
设置自定义前 MAVEN_OPTS
.我能够设置自定义
MAVEN_OPTS
并在我的 .travis.yml
中使用以下内容成功构建:script:
- sudo rm /etc/mavenrc
- export MAVEN_OPTS="-Xmx2469m -XX:MaxPermSize=512m"
- mvn clean install
请注意,我没有使用
language: java
在我的 travis 配置中,直接通过 script
调用 maven指示。
关于scala - Travis CI 忽略 MAVEN_OPTS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29201549/