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