Travis CI忽略了MAVEN_OPTS?

Emm*_*ell 8 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"
Run Code Online (Sandbox Code Playgroud)

看起来不错.但是,它记录后不久:

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=192m; support was removed in 8.0
Run Code Online (Sandbox Code Playgroud)

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

我尝试MAVEN_OPTS在我的pom中指定许多其他地方,但无济于事.例如,对于maven-scala-plugin,我有:

<configuration>
  ...
  <jvmArgs>
    <jvmArg>-Xmx3g</jvmArg>
    <jvmArg>-XX:MaxPermSize=512m</jvmArg>
  </jvmArgs>
</configuration>
Run Code Online (Sandbox Code Playgroud)

而且我在maven-surefire-plugin和scalatest插件下也有以下内容,尽管编译过程中构建失败而不是测试:

<configuration>
  <argLine>-Xmx3g -XX:MaxPermSize=512m</argLine>
</configuration>
Run Code Online (Sandbox Code Playgroud)

以下是我的.travis.yml的全部内容:

language: java
env:
  global:
    - MAVEN_OPTS="-XX:MaxPermSize=512m -Xmx3g"
script: mvn clean install
jdk:
    - oraclejdk8
    - oraclejdk7
Run Code Online (Sandbox Code Playgroud)

我正在使用Scala 2.11.2和scala-maven-plugin 3.2.0.

Emm*_*ell 9

更新(2015年2月11日):

这终于在这里完全解决.引用:

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

.travis.yml:

before_script:
  - echo "MAVEN_OPTS='-Xmx2g -XX:MaxPermSize=512m'" > ~/.mavenrc
Run Code Online (Sandbox Code Playgroud)

(你也可以before_install根据你的设置把它放进去).

老答案:

我终于在这里找到了答案,它在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
Run Code Online (Sandbox Code Playgroud)

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