29

テストコードに Java 5 を使用し、メインコードに Java 1.4 を使用するように Maven コンパイラを構成するにはどうすればよいですか?

4

3 に答える 3

31

関連する Java バージョンへの準拠を設定する場合は、実行ごとにコンパイラ プラグインを構成できます。Maven が、少なくとも指定した最高​​バージョンと同じ最新の JDK を使用していると仮定します。プロパティを使用することで、必要に応じてコマンドラインまたは子でその構成をオーバーライドできます。

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

異なるコンパイラを使用することを意味する場合、それはもう少し複雑です。JDKへのパスと使用しているコンパイラのバージョンを指定する必要があるためです。これらもプロパティで定義できます。あなたの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>

通常のビルドが設定されているプロパティに依存しないように、サポートする JDK ごとに 1 つずつ、プロファイルでコンパイラ構成を定義することが理にかなっていることに注意してください。

また、 Maven 3.x では、実行可能ファイルを指定するときにパラメーターを含める必要がありforkます。

  <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>
于 2009-07-31T17:48:39.350 に答える
18

maven-compiler-pluginバージョン3.5.1を使用してJava 7ソースとJava 8テストソースをコンパイルするという受け入れられた回答には運がありませんでした。コンパイル プラグインは、メイン ソースとテスト ソースの両方に source / target パラメーターを使用したためです。

しかし、テスト ソースとターゲットに個別の構成パラメーターがあることがわかりました。

だから私にとってうまくいった解決策は

 <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>
于 2016-08-03T12:39:32.223 に答える