2015-03-23 20 views
8

Mój projekt Scala (zarządzany przez Mavena) nie działa na Travisie, powodując błąd GC overhead limit exceeded pomimo kompilacji dobrze lokalnie z tym samym MAVEN_OPTS=-Xmx3g -XX:MaxPermSize=512m. Podejrzewam, że Travis jest jakoś ignorując moje MAVEN_OPTS: Kiedy próbuję przetestować przeciwko Oracle JDK 8, Travis kłody:Travis CI ignorując MAVEN_OPTS?

$ Setting environment variables from .travis.yml 
$ export MAVEN_OPTS="-XX:MaxPermSize=512m -Xmx3g" 

który wygląda dobrze. Jednak wkrótce po jej kłody:

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

co jest niepokojące, ponieważ nigdzie ja określając -XX:MaxPermSize=192m tylko 512m. (To prowadzi mnie do przekonania, że ​​moja -Xmx3g jest również ignorowana, co powoduje awarię kompilacji.)

Próbowałem określając MAVEN_OPTS w wielu dodatkowych miejscach w moim pom, bezskutecznie. Na przykład, za-plugin maven-scala, mam:

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

I mam również następujące pod wtyczki maven-surefire-plugin i scalatest, choć kompilacja zawodzi podczas kompilacji nie testy:

<configuration> 
    <argLine>-Xmx3g -XX:MaxPermSize=512m</argLine> 
</configuration> 

Poniżej całość mojego .travis.yml:

language: java 
env: 
    global: 
    - MAVEN_OPTS="-XX:MaxPermSize=512m -Xmx3g" 
script: mvn clean install 
jdk: 
    - oraclejdk8 
    - oraclejdk7 

Używam Scala 2.11.2 i scala-maven-plugin 3.2.0.

Odpowiedz

8

UPDATE (2.11.15):

ten został ostatecznie w pełni rozwiązany here. Cytując:

Jeśli chcesz użyć buduje zbiornik na bazie (nie opierając się na sudo), możesz powtórzyć to, co chcesz do pliku $HOME/.mavenrc i które będą miały pierwszeństwo przed /etc/mavenrc, tak:

w .travis.yml:

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

(można również umieścić to w before_install zależności od konfiguracji).

Old odpowiedź:

końcu znalazłem odpowiedź here, który odwołuje this (closed but not resolved) issue na github Travis CI.

Wydaje się, że Travis eksportuje zmienną środowiskową MAVEN_OPTS jako root za pomocą pliku /etc/mavenrc, który następnie nie zostanie przesłonięta przez innych MAVEN_OPTS definicji (na przykład poprzez ENV/globalne ustawienia w config Travis). Obejście problemu polega na usunięciu /etc/mavenrc przed ustawieniem niestandardowego MAVEN_OPTS.

udało mi się ustawić niestandardowy MAVEN_OPTS i zbudować z powodzeniem przy użyciu następujących w moim .travis.yml:

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

Zauważ, że nie używam language: java w moim Travis config, po prostu dzwoniąc Maven bezpośrednio poprzez dyrektywy script.

+1

Prawdopodobnie chcesz przedinstalować, lub before_script, aby wykonać polecenie echo. Nie chcesz całkowicie zastąpić skryptu w ten sposób. –

+0

@ CraigP.Motlin dzięki, myślę, że masz rację, zredagowałem swoją odpowiedź, aby użyć 'before_script' zamiast tylko skryptu. W moim przypadku tak naprawdę nie ma znaczenia, ponieważ i tak zastępuję skrypt, aby skompilować używając zarówno maven, jak i sbt. Czy mógłbyś wyjaśnić, dlaczego źle zastąpić skrypt? –

+1

Zastępuje polecenie uruchamiające testy za pomocą polecenia echo. Tak więc kompilacja w zasadzie ustawia środowisko i wychodzi. Byłoby ok, gdyby polecenie było podobne do echa ... && mvn ... –

3

export MAVEN_SKIP_RC=true to zalecany sposób robienia tego w systemie z/etc/mavenrc. Spowoduje to zignorowanie wartości domyślnych i odczytanie zmiennej MAVEN_OPTS.

0

Właśnie to dla mnie zadziałało.

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 konieczna jest jak @adam mówi i MAVEN_OPTS to, co potrzebne, aby uzyskać javac zatrzymać wydmuchiwania stos.