Domanda

Come posso configurare il compilatore maven per usare java 5 per il mio codice di prova e java 1.4 per il mio codice principale?

È stato utile?

Soluzione

Se si desidera impostare la conformità alla versione Java pertinente, è possibile configurare il plug-in del compilatore per ogni esecuzione. Supponendo che Maven stia utilizzando un JDK almeno aggiornato come la versione più alta specificata. Usando le proprietà puoi sovrascrivere quella configurazione dalla riga di comando o in un figlio 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 intendi utilizzare diversi compilatori , è un po 'più complicato. poiché è necessario specificare il percorso di JDK e la versione del compilatore in uso. Anche in questo caso questi possono essere definiti in proprietà. Anche se potresti volerli definire 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 che potrebbe avere senso definire le configurazioni del compilatore nei profili, una per ogni JDK che supporti, in modo che i tuoi build normali non facciano affidamento sulle proprietà impostate.

Inoltre, in Maven 3.x, è necessario includere il parametro fork quando si specifica l'eseguibile, ad es .:

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

Altri suggerimenti

Non ho avuto fortuna con la risposta accettata compilando java 7 source e java 8 sorgenti di test usando maven-compiler-plugin , versione 3.5.1. Perché il plug-in di compilazione ha utilizzato il parametro source / target per entrambe le fonti, main e test.

Ma ho scoperto che esistono parametri di configurazione separati per l'origine e la destinazione del test.

Quindi per me la soluzione che ha funzionato è stata

 <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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top