Настроить Maven для использования разных JDK для разных версий J2SE?
Я хочу настроить Maven2 на использование sun-java6-jdk для сборки модулей Java SE 1.6 и использовать openjdk-7 для сборки модулей Java SE 1.7. Возможно ли это?
Затем Maven2 автоматически выбирает правильный JDK для сборки разных модулей в одной команде.
Например, это должно быть
$ mvn package
вместо
$ cd module1
$ update-alternatives ... jdk6 ...
$ mvn package
...
$ cd module2
$ update-alternatives ... jdk7 ...
$ mvn package
P.S. Ничего не известно о файлах pom.xml, которые уже были установлены maven-compiler-plugin
с разными значениями <source>
, <target>
для разных модулей. Если я решил использовать openjdk-7, Maven2 будет генерировать файлы классов версии 1.6, но с использованием openjdk-7, а не sun-java6-jdk. Вопрос в том, как настроить профили Java SE.
Ответы
Ответ 1
мы решили эту проблему, явно выделив javac в config плагина компиляции (с JAVA_HOME_6 и JAVA_HOME_7, определяемыми как переменные среды):
и для модуля Java 6
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<executable>${env.JAVA_HOME_6}/bin/javac</executable>
<fork>true</fork>
</configuration>
</plugin>
и для модуля Java 7
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<executable>${env.JAVA_HOME_7}/bin/javac</executable>
<fork>true</fork>
</configuration>
</plugin>
Ответ 2
Вы можете указать плагину maven-compiler для Скомпилировать источники с помощью другого JDK
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<executable><!-- path-to-javac --></executable>
</configuration>
</plugin>
Ответ 3
Из многочисленных upvotes в ответе @lweller я предполагаю, что это странно, но с 1.7
как source
и target
maven все еще пытался скомпилировать с помощью java 1.5
. Скорее всего, только с 7
... Вот так:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>7</source> <!-- see here, says only 7, not 1.7 -->
<target>7</target> <!-- here as well -->
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<executable>${env.JAVA_HOME_7}/bin/javac</executable>
<fork>true</fork>
</configuration>
</plugin>
maven-compiler-plugin версия 2.5.1.