Как назначить конкретную версию jdk для maven для создания моего проекта?

Моя проблема: тестовые случаи зеленые на локальном, но некоторые из них не работают на hudson-сервере из-за не поддерживаемой версии jdk. Локальным является ibm jdk1.6 sr4 windows, но hudson server установлен ibm jdk1.6 sr9 linux. "Эта виртуальная машина Java не поддерживается для использования с Blaze Advisor, поскольку реализация java.beans.Introspector не прошла проверку".

Мне сказали, что сервер Hudson не может перейти на другой jdk, поэтому я думаю, что есть ли какая-нибудь работа, чтобы обойти эти неудачи? Могу ли я сказать maven для компиляции проекта с конкретным jdk? Например, версия 1.6 с sr4, а не sr9. Также мне нужно maven для загрузки sr4 в качестве зависимости coz, нет этой версии на сервере.

Сложно это сделать, когда я искал. Так какой еще вариант я мог бы иметь?

Спасибо за любое предложение.

Ответ 1

Maven должен начинать с java, указанного в JAVA_HOME, если вам нужно использовать другую версию, я бы использовал плагин toolchain для запуска вашей сборки с указанной версией jdk. Для этого потребуется, чтобы версия была уже установлена ​​на сервере.

http://maven.apache.org/guides/mini/guide-using-toolchains.html

Вам нужно будет добавить плагин к вашему pom и добавить файл toolchains.xml.

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-toolchains-plugin</artifactId>
    <version>1.0</version>
    <executions>
      <execution>
        <phase>validate</phase>
        <goals>
          <goal>toolchain</goal>
            </goals>
      </execution>
    </executions>
    <configuration>
      <toolchains>
        <jdk>
          <version>1.5</version>
          <vendor>sun</vendor>
        </jdk>
      </toolchains>
    </configuration>
  </plugin>

файл toolchains.xml, добавленный в папку .m2, которая указывает местоположение установки для jdk

<?xml version="1.0" encoding="UTF8"?>
<toolchains>
  <toolchain>
     <type>jdk</type>
     <provides>
         <version>1.5</version>
         <vendor>sun</vendor>
         <id>default</id>
     </provides>
     <configuration>
        <jdkHome>/path/to/jdk/1.5</jdkHome>
     </configuration>
  </toolchain>

Ответ 2

Вы уверены? Хадсон должен поддерживать коммутацию JDK, я сделал это в Jenkins. В худшем случае вы можете указать переменную env JAVA_HOME в сборке Hudson. Невозможно изменить в maven, потому что самому maven нужно запустить JDK.

Ответ 3

Вы можете настроить это в своем maven-compiler-plugin

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>

Вы также можете использовать профили -P для установки версий на основе сред.