мне нужно изменить значение классов, используемое Maven-компилятор-плагин для компиляции тестов и я не могу найти способ сделать это ...Maven Compiler Plugin: Как изменить значение classpath для testCompile?
Я прочитал:
- maven add a local classes directory to module's classpath
- Maven: add a folder or jar file into current classpath
Но эти решения не хорошо для меня.
Более точно, мы строим клиента банку, чтобы использовать этот API, и мы должны построить этот клиент дважды:
- Один с источником & цель 1.8 для нового клиента
- Один с источником & целевой 1,7 для клиента по-прежнему с помощью JDK7
Вот конфигурация Maven-компилятора-плагин в pluginManagement моего родителя POM:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<includes>
<include>**/*.java</include>
</includes>
<target>1.8</target>
<source>1.8</source>
<fork>true</fork>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<execution>
<id>jdk7</id>
<phase>none</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<source>1.7</source>
<target>1.7</target>
<fork>true</fork>
<outputDirectory>${project.build.directory}/classes/jdk7/</outputDirectory>
</configuration>
</execution>
<execution>
<id>jdk8</id>
<phase>none</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<fork>true</fork>
<outputDirectory>${project.build.directory}/classes/jdk8/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Фаза установлена в «none», чтобы отключить эти исполнения по умолчанию и они выполняются только для клиента.
Это конфигурация моего клиента POM:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>jdk7</id>
<phase>compile</phase>
</execution>
<execution>
<id>jdk8</id>
<phase>compile</phase>
</execution>
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
Как вы можете видеть, я отключил выполнение «по умолчанию компиляции», потому что она компилируется 3-го раза источник непосредственно в мишени/и это довольно грязно в моем случае. Я хочу только классы JDK7 в классах target/classes/jdk7 и JDK8 в target/classes/jdk8.
Проблема заключается в том, что исполнение "по умолчанию-testCompile" из Maven-компилятор-плагин использует для пути к классам является:
- мишени/тест-классы
- целевыми/классы
- Все зависимости банка
Ошибка компиляции из-за того, что maven-compiler-plugin не ищет файлы классов в папке target/classes/jdk8.
Я пытался добавить compilerArguments & compilerArgs конфигурации, но он не работает ...
Как я добавить «целевой/классы/jdk8» или изменить «целевые/классы» на " target/classes/jdk8 "к пути к классам, используемому default-testCompile?
Примечание: Я знаю, что если я не отключу «компиляцию по умолчанию», он будет работать, потому что классы будут находиться в «target/classes», но я не хочу компилировать в 3 раза источники. .
Являются ли классы действительно сгенерированы под 'target/classes/jdk7' (соответственно' jdk8')? 'maven-compiler-plugin' не имеет опции' '. Обычно это настраивается с атрибутом ''. –
Tunaki
Действительно, этот вариант не существует, но я нашел его на другом посту, и он работает хорошо. Я попытался добавить свойство «-d» в compilerArgs, но он не работал. –
Хм. Используете ли вы профиль для переключения с JDK? Если да, можете ли вы опубликовать эту конфигурацию? – Tunaki