Come posso configurare il compilatore maven per utilizzare java 5 per il mio codice di test e java 1.4 per il mio codice principale?Diverse versioni del compilatore maven per test e main
risposta
Se si desidera impostare la conformità alla versione Java pertinente, è possibile configurare il plug-in del compilatore per ogni esecuzione. Supponendo che Maven stia usando un JDK almeno attuale come la versione più alta che hai specificato. Utilizzando le proprietà è possibile ignorare che la configurazione sulla riga di comando o in un bambino, se necessario:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${compileSource}</source>
<target>${compileSource}</target>
</configuration>
<executions>
<execution>
<id>test-compile</id>
<phase>process-test-sources</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<source>${testCompileSource}</source>
<target>${testCompileSource}</target>
</configuration>
</execution>
</executions>
</plugin>
...
<properties>
<compileSource>1.4</compileSource>
<testCompileSource>1.5</testCompileSource>
</properties>
se si intende utilizzare diversi compilatori , che è un po 'più complesso. poiché è necessario specificare il percorso del JDK e la versione del compilatore che si sta utilizzando. Di nuovo questi possono essere definiti nelle proprietà. Anche se si consiglia di definirli in settings.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${compileSource}</source>
<target>${compileSource}</target>
<executable>${compileJdkPath}/bin/javac</executable>
<compilerVersion>${compileSource}</compilerVersion>
</configuration>
<executions>
<execution>
<id>test-compile</id>
<phase>process-test-sources</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<source>${testCompileSource}</source>
<target>${testCompileSource}</target>
<executable>${testCompileJdkPath}/bin/javac</executable>
<compilerVersion>${testCompileSource}</compilerVersion>
</configuration>
</execution>
</executions>
</plugin>
...
<properties>
<compileSource>1.4</compileSource>
<testCompileSource>1.5</testCompileSource>
<compileJdkPath>path/to/jdk</compileJdkPath>
<testCompileJdkPath>path/to/test/jdk<testCompileJdkPath>
</properties>
Nota potrebbe avere senso per definire le configurazioni del compilatore nei profili, uno per ogni JDK sostenete, in modo che il vostro normale costruisce non fare affidamento sulle proprietà essere impostato.
Inoltre, in Maven 3.x, è necessario includere il parametro fork
quando si specifica l'eseguibile, esempio:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<executions>
<execution>
<id>default-testCompile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<fork>true</fork>
<executable>${testCompileJdkPath}/bin/javac</executable>
<source>1.8</source>
<target>1.8</target>
</configuration>
</execution>
</executions>
</plugin>
ho avuto fortuna con la risposta accettata la compilazione di Java 7 source e Java 8 fonti di test usando maven-compiler-plugin
, versione 3.5.1. Poiché il plug-in di compilazione utilizzava il parametro source/target per entrambe le fonti, main e test.
Ma ho scoperto, ci sono parametri di configurazione separati per la fonte di prova e la destinazione.
Quindi per me la soluzione che ha funzionato è stato
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<testSource>1.8</testSource>
<testTarget>1.8</testTarget>
</configuration>
</plugin>
</plugins>
</build>
- 1. Versioni diverse della stessa dipendenza in Maven
- 2. Maven - dipendenze transitive con diverse versioni
- 3. Test delle versioni delle dipendenze in maven
- 4. impostazione predefinita del compilatore maven
- 5. possiamo avere un main() in un'interfaccia e diverse implementazioni per main() nelle classi che implementano questa interfaccia?
- 6. Test dell'unità per errori del compilatore
- 7. Come eseguire unit test contro diverse versioni di una dipendenza
- 8. Caricamento su cheeseshop diverse versioni di un pacchetto per diverse versioni di Python
- 9. Versioni di Maven-versioni di maven-plugin plug-in 2.2
- 10. compilazione del codice sorgente su 2 diverse versioni di gcc
- 11. Utilizzo del selenio per test su più versioni di browser
- 12. GWT directory di output del compilatore maven
- 13. Configura Maven per utilizzare JDK diversi per le diverse versioni di J2SE?
- 14. Utilizzo di due versioni diverse della stessa dipendenza del nodo
- 15. apt-get install per diverse versioni python
- 16. versioni maven rilasciano candidati e snapshot
- 17. Splitting main e test in build di eclissi di gradle
- 18. Aggiornamento dell'aggiornamento del plug-in Versioni di Maven Controllo
- 19. Come posso specificare dipendenze diverse per diverse versioni del framework .NET in un pacchetto NuGet personalizzato?
- 20. Come utilizzare versioni-maven-plugin per impostare le versioni del modulo figlio?
- 21. Build per diverse piattaforme il modo Maven
- 22. Test di integrazione del compilatore in Haskell
- 23. Java/Maven: diverse versioni SLF4J in diversi progetti che causano costruire errori sull'integrazione
- 24. Programmare layout diversi per le diverse versioni in Android
- 25. Usa icone diverse con versioni di Android SDK diverse
- 26. Uso di diverse versioni del file dll in un'app
- 27. Configurazione di IntelliJ per l'uso del compilatore Groovy anziché del compilatore Java
- 28. Maven Come includere/src/main/risorse
- 29. In maven, qual è la differenza tra main/resources e main/config?
- 30. Maven + SLF4J: conflitto di versione quando si utilizzano due diverse dipendenze che richiedono due diverse versioni di SLF4J
Quando tento il primo esempio con la versione sorgente e la destinazione '1.8' per le prove e' 1.7' per codice principale, la compilazione riesce quando 'compile' mvn viene eseguito separatamente da 'mvn test-compile', ma in comandi come' mvn compile test-compile' o, più semplicemente, 'mvn test-compile' (dove' compile' viene estratto) la configurazione principale con ' 'sembra avere la precedenza, e fallisce. –
La soluzione è che è ' default-testCompile ' sovrascrive il comportamento predefinito. La risposta sopra aggiunge un'esecuzione aggiuntiva. –
Perdona la mia mancanza di comprensione delle esecuzioni. Ciò causerà la compilazione del codice principale dell'applicazione sulla stessa versione di destinazione del codice di prova se si eseguono test di tipo Maven? O le fonti principali e di test avranno versioni di bytecode target diverse? –