2015-03-23 7 views
8

Il mio progetto Scala (gestito da Maven) non riesce a costruire su Travis, lanciando un errore GC overhead limit exceeded malgrado la compilazione della multa a livello locale con lo stesso MAVEN_OPTS=-Xmx3g -XX:MaxPermSize=512m. Ho il sospetto che Travis è in qualche modo ignorando la mia MAVEN_OPTS: Quando provo a testare contro Oracle JDK 8, Travis registra:Travis CI ignora MAVEN_OPTS?

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

che sembra buono. Tuttavia, subito dopo si registra:

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

che è preoccupante poiché in nessun luogo sto specificando -XX:MaxPermSize=192m, solo 512m. (Questo mi porta a credere che anche il mio -Xmx3g venga ignorato, causando l'errore di compilazione.)

Ho provato a specificare il MAVEN_OPTS in molti altri posti nel mio pom, senza risultato. Ad esempio, per l'esperto-Scala-plugin, ho:

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

e ho anche il seguente sotto la maven-surefire-plugin e ScalaTest plug-in, anche se la build sta venendo a mancare durante la compilazione non test:

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

che segue è la totalità della mia .travis.yml:

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

sto usando Scala 2.11.2 e scala-maven-plugin 3.2.0.

risposta

8

UPDATE (11/2/15):

Questo è stato finalmente risolto completamente here. Citando:

Se si desidera utilizzare il contenitore a base di build (non basandosi su sudo), è possibile eco ciò che si desidera in un file $HOME/.mavenrc e che avrà la precedenza su /etc/mavenrc, in questo modo:

in .travis.yml:

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

(si potrebbe anche mettere questo in before_install a seconda della configurazione).

Vecchia risposta:

ho finalmente trovato la risposta here, che fa riferimento this (closed but not resolved) issue sul github Travis CI.

Sembra Travis esporta una variabile MAVEN_OPTS ambiente come root tramite il file /etc/mavenrc, che poi non ottiene sovrascritto con qualsiasi altro MAVEN_OPTS definizioni (ad esempio tramite ENV/impostazioni globali nel config Travis). Per risolvere il problema, eliminare /etc/mavenrc prima di impostare il numero personalizzato MAVEN_OPTS.

sono stato in grado di impostare personalizzati MAVEN_OPTS e costruire con successo la seguente nel mio .travis.yml:

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

Si noti che non sto usando language: java nel mio Travis configurazione, basta chiamare Maven direttamente tramite la direttiva script.

+1

Probabilmente si desidera before_install, o before_script, per eseguire il comando echo. Non vorresti sostituire completamente lo script in questo modo. –

+0

@ CraigP.Motlin grazie, penso che tu abbia ragione, ho modificato la mia risposta per usare 'before_script' piuttosto che solo script. Nel mio caso non ha molta importanza dal momento che sto sostituendo comunque lo script per compilare usando sia Maven che SBT. Potresti approfondire perché è sbagliato sostituire completamente lo script? –

+1

Sostituisce il comando che esegue i test con il comando echo. Quindi la build imposta fondamentalmente l'ambiente e le uscite. Sarebbe ok se il comando fosse qualcosa come echo ... && mvn ... –

3

export MAVEN_SKIP_RC=true è il modo consigliato di fare ciò quando si ha a che fare con un sistema che ha un/etc/mavenrc. Questo farà ignorare i valori predefiniti e leggere la variabile MAVEN_OPTS.

0

Questo è ciò che alla fine ha funzionato per me.

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 

Il MAVEN_SKIP_RC è necessario in quanto @ Adamo dice e le MAVEN_OPTS sono quello che mi serviva per arrivare javac per fermare spegnendo la pila.