2013-02-18 2 views
11

У меня есть Jenkins-сервер с JDK & JRE 6 и 7 установлены вместе.Maven/Jenkins java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0

Все проекты построены на 1,6, за исключением 1,7-зависимых.

Я настроил файл maven pom для использования компилятора Java из среды JAVA_HOME_7 PATH.

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.0</version> 
       <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> 
        <verbose>false</verbose> 
       </configuration> 
      </plugin> 

Во время MVN установки я получаю следующее сообщение об ошибке:

java.lang.RuntimeException: There was an error in the forked process 
java.lang.UnsupportedClassVersionError: : Unsupported major.minor version 51.0 

, который я думаю, означает, что сервер использует JRE 1.6.

Как сохранить JRE 1.6 вместе с 1.7, чтобы сохранить совместимость со старыми 1,6 проектами и новым 1,7?

Большое спасибо, Атанас

+0

Возможно, вы используете некоторые модульные или интеграционные тесты как часть сборки, например, с помощью maven surefire или отказоустойчивых подключаемых модулей? ... и они также используют Java 7? (Coz похоже, что Дженкинс разворачивает процесс запуска чего-то с помощью Java6 JVM). – sbk

+0

Да, вы правы, я запускаю пакет junit с плагином surefire, а код JDK 7 зависит от того, что оператор multi-catch не поддерживается в-источнике 1.6. –

+0

Ответ на сообщение ниже – sbk

ответ

12

Вам также нужно запустить тесты проверки с помощью java 7. По умолчанию surefire будет использовать тот же jvm, что и работающий maven - Java6 в вашем случае.

<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.13</version> 
     <configuration> 
     ... 
     <jvm>${env.JAVA_HOME_7}/bin/java</jvm> 
     </configuration> 
    </plugin> 
    </plugins> 
+0

Спасибо, что решили проблему! –

+0

Ааа! Взрыв в цель! –

4

Я помню, я боролся с этой проблемой. Выполните следующие шаги, чтобы решить проблему

Причина: когда установлено несколько JRE, то множественным java.exe также устанавливается на многие места системы.

Решение: Изменение среды PATH переменной и изменить порядок java.exe. положить местоположение java.exe на первой позиции, как показано ниже код

PATH = C: \ Program Files \ Java \ jdk1.6.0 \; other; other; other

Изменить вышерасположенное положение в соответствии с вашим использованием и местом установки.

+1

Спасибо, моя проблема решена с помощью ваш и sbk поможет! –

+0

Отлично, удачи ...... –

-1

Посмотрите на свой каталог target/lib, у вас могут быть две версии одной и той же банки. Для меня это создавало pro

0

Я столкнулся с этой проблемой несколько раз, потому что у вас есть несколько версий jdk (jre) в вашей системе, поэтому просто установите JAVA_HOME в соответствующий jdk, который вы скомпилируете проект с и работает будет хорошо.

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