2009-07-31 8 views

ответ

24

Если вы хотите установить соответствие для соответствующей версии 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 вы поддерживаете, так что ваши нормальные строит не полагаться на свойствах будучи установленным.

Кроме того, в 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> 
+0

При попытке первого примера с исходной и целевой версией '1.8' для испытаний и' 1.7' для основного кода, компиляция завершается успешно когда 'МВН compile' запускается отдельно от 'mvn test-compile', но в таких командах, как' mvn compile test-compile' или, проще говоря, 'mvn test-compile' (где' compile' втягивается), основная конфигурация с ' 1.7 'Кажется, имеет приоритет, и он терпит неудачу. –

+2

Решение состоит в том, что это ' default-testCompile', который переопределяет поведение по умолчанию. Вышеприведенный ответ добавляет дополнительное выполнение. –

+0

Простите мое отсутствие понимания о казни. Это приведет к тому, что основной код приложения будет скомпилирован с той же целевой версией, что и тестовый код, если выполняется тестирование maven? Или основные и тестовые источники имеют разные целевые версии байт-кода? –

9

Я не везло с принятым ответ компиляции Java 7 и Java источник 8 Источники тестирования с использованием maven-compiler-plugin, версия 3.5.1. Поскольку плагин компиляции использовал исходный/целевой параметр как для основного, так и для тестового источников.

Но я узнал, что существуют отдельные параметры конфигурации для источника и цели тестирования.

Так что для меня решение, которое работало был

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

 Смежные вопросы

  • Нет связанных вопросов^_^