Travis CI忽略了MAVEN_OPTS?

时间:2015-03-23 00:23:23

标签: scala maven travis-ci scala-maven-plugin

我的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

这是令人不安的,因为我在NOWHERE指定-XX:MaxPermSize=192m,只有512m。 (这使我相信我的-Xmx3g也被忽略,导致编译失败。)

我尝试在我的pom中的许多其他位置指定MAVEN_OPTS,但无济于事。例如,对于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。

3 个答案:

答案 0 :(得分:9)

更新(11/2/15):

这终于完全解决了here。引用:

如果您想使用基于容器的构建(不依赖于sudo),您可以将您想要的内容回显到$HOME/.mavenrc文件中,并优先于/etc/mavenrc,如下所示:

.travis.yml中的

before_script:
  - echo "MAVEN_OPTS='-Xmx2g -XX:MaxPermSize=512m'" > ~/.mavenrc

(根据您的设置,您也可以将其放在before_install中。)

旧回答:

我终于找到了答案here,其中引用了Travis CI github上的this (closed but not resolved) issue

似乎Travis通过文件MAVEN_OPTS以root身份导出/etc/mavenrc环境变量,然后不会被任何其他MAVEN_OPTS定义覆盖(例如,通过env / global settings in travis配置)。解决方法是在设置自定义/etc/mavenrc之前删除MAVEN_OPTS

我可以使用MAVEN_OPTS中的以下内容设置自定义.travis.yml并成功构建:

script:
  - sudo rm /etc/mavenrc
  - export MAVEN_OPTS="-Xmx2469m -XX:MaxPermSize=512m"
  - mvn clean install

请注意,我没有在我的travis配置中使用language: java,只是通过script指令直接调用maven。

答案 1 :(得分:1)

虽然可以在Travis CI版本中设置-Xmx3g,但它的服务器内存有限,在分叉的surefire测试中可以免费使用JVM堆。

以下是使用-Xmx2560m获取Travis CI最高速度的项目: https://github.com/plokhotnyuk/actors/blob/8f22977981e0c4d21b67beee994b339eb787ee9a/pom.xml#L151

您可以通过添加到- sudo cat /proc/meminfo的{​​{1}}行检查可用内存。以下是一些Travis CI构建的输出:https://travis-ci.org/plokhotnyuk/actors/jobs/55013090#L923

如果您的项目需要更大的堆大小,请尝试https://www.shippable.com

或者最好使用Wercker(更快的构建,而不是在队列中等待)http://wercker.com

答案 2 :(得分:0)

这最终对我有用。

language: java
sudo: false
jdk:
  - oraclejdk8
install: MAVEN_SKIP_RC=true MAVEN_OPTS="-Xss4M" mvn install -DskipTests=true
script: MAVEN_SKIP_RC=true MAVEN_OPTS="-Xss4M" mvn

需要MAVEN_SKIP_RC,因为@adam说,MAVEN_OPTS是我需要让javac停止吹灭堆栈。