Трэвис CI игнорирует MAVEN_OPTS?

Мой проект Scala (управляемый Maven) не в состоянии построить на Трэвисе, бросая GC overhead limit exceeded ошибка несмотря на локальную компиляцию с тем же MAVEN_OPTS=-Xmx3g -XX:MaxPermSize=512m, Я подозреваю, что Трэвис как-то игнорирует мою 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 во многих других местах у меня в помпе, безрезультатно. Например, для maven-scala-plugin у меня есть:

<configuration>
  ...
  <jvmArgs>
    <jvmArg>-Xmx3g</jvmArg>
    <jvmArg>-XX:MaxPermSize=512m</jvmArg>
  </jvmArgs>
</configuration>

И у меня также есть следующее под maven-surefire-plugin и scalatest plugin, хотя сборка не выполняется во время компиляции, а не тестов:

<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.

4 ответа

Решение

ОБНОВЛЕНИЕ (2/2/15):

Это было наконец полностью решено здесь. Цитирование:

Если вы хотите использовать контейнерные сборки (не полагаясь на sudo), вы можете отобразить то, что вы хотите, в $HOME/.mavenrc файл, и это будет иметь приоритет над /etc/mavenrc, вот так:

в .travis.yml:

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

(Вы также можете поместить это в before_install в зависимости от вашей настройки).

Старый ответ:

Я наконец нашел ответ здесь, который ссылается на эту (закрытую, но не решенную) проблему на github Travis CI.

Кажется, Трэвис экспортирует MAVEN_OPTS переменная окружения как root через файл /etc/mavenrcкоторый затем не переопределяется другими MAVEN_OPTS определения (например, через env / глобальные настройки в конфигурации travis). Обходной путь должен удалить /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, просто вызывая maven напрямую через script директивы.

export MAVEN_SKIP_RC=true это рекомендуемый способ сделать это при работе с системой, которая имеет /etc/mavenrc. Это позволит игнорировать значения по умолчанию и прочитать MAVEN_OPTS переменная.

Пока можно установить -Xmx3g в сборках Travis CI его серверы имеют ограниченную память, чтобы быть свободными для кучи JVM в разветвленных верных тестах.

Вот проект, который используют -Xmx2560m для максимальной скорости на Travis CI: https://github.com/plokhotnyuk/actors/blob/8f22977981e0c4d21b67beee994b339eb787ee9a/pom.xml#L151

Вы можете проверить доступную память по - sudo cat /proc/meminfo линия добавлена ​​к .travis.yml, Вот вывод некоторых сборок Travis CI: https://travis-ci.org/plokhotnyuk/actors/jobs/55013090

Если вашему проекту требуется больший размер кучи, попробуйте https://www.shippable.com/

Или лучше использовать Wercker (гораздо более быстрые сборки и вообще без ожидания в очереди) http://wercker.com/

Это то, что, наконец, сработало для меня.

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, чтобы перестать выдувать стек.

Другие вопросы по тегам