Различные версии компилятора знатока для теста и основной

gcc имеет много расширений языка C, которым я наслаждаюсь, который может быть найден здесь . Часть моего избранного функциональные атрибуты . Одним чрезвычайно полезным примером является атрибут формата. Это может использоваться при определении пользовательской функции, которая берет printf строку формата. При включении этого функционального атрибута gcc сделает, проверяет аргументы, чтобы гарантировать, чтобы строка формата и аргументы совпали и генерировали предупреждения или ошибки как соответствующие.

int my_printf (void *my_object, const char *my_format, ...)
            __attribute__ ((format (printf, 2, 3)));

26
задан mikołak 19 March 2014 в 21:06
поделиться

1 ответ

Если вы хотите установить соответствие соответствующей версии 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>
28
ответ дан 28 November 2019 в 07:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: