it-roy-ru.com

Компиляция кода Java 7 через Maven

Мои списки файлов pom

<project>
  <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
            </plugin>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
  ...

Однако после mvn clean install я получаю

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] Failure executing javac, but could not parse the error:
javac: invalid target release: 1.7
Usage: javac <options> <source files>

/usr/bin/Java -version is (which Java указывает здесь)

Java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

javac также указывает на правильную версию Java

/usr/bin/javac -> /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/bin/javac

На этом компьютере я использую zsh (echo $0 возвращает -zsh)

В моем .zshrc я определил:

 33 # HOME
 34 Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home
 35 SCALA_HOME=/Library/Scala/current
 36 FORGE_HOME=~/tools/forge/
 37 
 38 # PATH
 39 PATH="/Library/Frameworks/Python.framework/Versions/3.2/bin:${PATH}"
 40 PATH=${PATH}:${Java_HOME}/bin
 41 PATH=${PATH}:/bin/
 42 PATH=${PATH}:/sbin/
 43 PATH=${PATH}:/usr/bin/
 44 PATH=${PATH}:/usr/sbin/
 45 PATH=${PATH}:/opt/local/bin/
 46 PATH=${PATH}:/opt/local/sbin/
 47 PATH=${PATH}:/usr/local/git/bin
 48 PATH=${PATH}:/usr/local/git/sbin
 49 PATH=${PATH}:/Applications/Xcode.app/Contents/Developer/usr/bin
 50 PATH=${PATH}:${SCALA_HOME}/bin
 51 PATH=${PATH}:${FORGE_HOME}/bin
 52 
 53 export PATH

Когда я запускаю mvn clean install --debug, я вижу, что на самом деле я использую Java 6

  1 Apache Maven 3.0.3 (r1075438; 2011-02-28 11:31:09-0600)
  2 Maven home: /usr/share/maven
  3 Java version: 1.6.0_35, vendor: Apple Inc.
  4 Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Где это можно определить? У меня есть источник (d) мой .zshrc несколько раз.

154
JAM

Проверьте скрипт mvn в вашей установке maven, чтобы увидеть, как он собирает команду. Возможно, вы или кто-то другой жестко запрограммировали Java_HOME и забыли об этом.

153
Ryan Stewart

попробуйте использовать более новую версию плагина компилятора maven: 

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>

кроме того, указание кодировки исходного файла в maven лучше делать глобально:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

EDIT: Поскольку этот ответ все еще привлекает внимание, я просто хотел бы отметить, что последние значения (на момент последнего редактирования) составляют 3,2 для плагина компилятора maven и 1,8 для Java, как вопросы о компиляции Java 8 код через Maven обязательно появится в ближайшее время :-)

109
radai

У меня была та же проблема, и для ее решения я следую этой статье в блоге: http://www.mkyong.com/Java/how-to-set-Java_home-environment-variable-on-mac-os-x/

$ vim .bash_profile 

export Java_HOME=$(/usr/libexec/Java_home)

$ source .bash_profile

$ echo $Java_HOME
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

специальные tks to @mkyong

Правка: Теперь я использую: jEnv + SDKMAN

48
eliocapelati

Пожалуйста, проверьте ваш pom.xml для тегов ниже

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>

он должен указать требуемую версию JDK

26
user4010880

У меня такая же проблема. Я обнаружил, что это потому, что скрипт Maven просматривает ссылку CurrentJDK ниже и находит 1.6 JDK. Даже если вы установите последнюю версию JDK, это не решается. Хотя вы можете просто установить Java_HOME в своем скрипте $ HOME/.bash_profile, я решил вместо этого исправить символическую ссылку следующим образом:

ls -l /System/Library/Frameworks/JavaVM.framework/Versions/
total 64
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6.0 -> CurrentJDK
drwxr-xr-x  9 root  wheel  306 11 Nov 21:20 A
lrwxr-xr-x  1 root  wheel    1 30 Oct 16:18 Current -> A
lrwxr-xr-x  1 root  wheel   59 30 Oct 16:18 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

Обратите внимание, что CurrentJDK указывает на 1.6.0.jdk

Чтобы исправить это, я выполнил следующие команды (вы должны проверить установленную версию и соответственно адаптироваться).

Sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
Sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
19
Chris McCarthy

Вы должны проверить версию Maven:

mvn -version

Вы найдете версию Java, которую Maven использует для компиляции. Вам может понадобиться сбросить Java_HOME, если это необходимо.

18
Loi Cao

Диагностика:

Вы можете увидеть, какую версию Java Maven использует, запустив "mvn --version"

Решение для Debian:

Сценарий mvn устанавливает внутреннюю переменную Java_HOME путем поиска javac (то есть javac). Поэтому, если у вас одновременно установлено несколько версий Java, например, JDK 6 и JDK 7 и используйте систему Альтернатив Debian для выбора между ними, даже если вы изменили альтернативу для «Java» на JDK 7, mvn по-прежнему будет использовать JDK 6. Вы также должны изменить альтернативу для «javac». Например.:

# update-alternatives --set javac /usr/lib/jvm/Java-7-openjdk-AMD64/bin/javac

Правка:

На самом деле, еще лучшее решение - использовать альтернативы update-Java (например)

# update-Java-alternatives -s Java-1.7.0-openjdk-AMD64

как подробно описано в https://wiki.debian.org/JavaPackage , потому что это изменит all альтернативы различным инструментам Java (их дюжина или около того).

4
user323094

Не могли бы вы попробовать более новый плагин; на сайте maven:

<version>3.0</version>

Я тоже видел следующее:

<compilerVersion>1.7</compilerVersion>
2
Joop Eggen

щелкните правой кнопкой мыши на вашем проекте в Eclipse и откройте «Run Configurations» .. проверьте версию jre там . иногда это не изменится по умолчанию в Eclipse, даже после изменения версии в buildpath.

2
ravinder reddy

Попробуйте изменить настройки компилятора Java в свойствах Eclipse-

Перейти: Настройки-> Java-> Компилятор-> Уровень соответствия компилятора-> 1.7 Применить Ok

Перезапустите IDE.

Подтвердите настройку компилятора для проекта - Перейдите: Свойства проекта-> Компилятор Java-> Снимите флажок (Использовать соответствие из среды выполнения 'JavaSE-1.6' на пути сборки Java). И выберите 1.7 в раскрывающемся списке. (Игнорировать, если уже 1.7)

Перезапустите IDE.

Если проблема не устранена, запустите отдельные тестовые примеры, используя команду в терминале.

mvn -Dtest=<test class name> test
2
Mithun Khatri

Не уверен, какая операционная система используется здесь, но вы можете исключить множество версий Java, затравливая un debian/ubuntu альтернативами update-Java, чтобы установить стандартную систему jvm по умолчанию.

#> update-Java-alternatives -l
Java-1.6.0-openjdk-AMD64 1061 /usr/lib/jvm/Java-1.6.0-openjdk-AMD64
Java-1.7.0-openjdk-AMD64 1071 /usr/lib/jvm/Java-1.7.0-openjdk-AMD64
Java-6-Sun 63 /usr/lib/jvm/Java-6-Sun
Java-7-Oracle 1073 /usr/lib/jvm/Java-7-Oracle

Чтобы установить новый, используйте:

#> update-Java-alternatives -s Java-7-Oracle

Нет необходимости устанавливать Java_HOME для большинства приложений.

2
Bruce Edge

{Java_1_4_HOME}/bin/javacy, вы также можете попробовать ...

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <showDeprecation>true</showDeprecation>
                <showWarnings>true</showWarnings>
                <executable>{Java_HOME_1_7}/bin/javac</executable>
                <fork>true</fork>
        </configuration>
    </plugin>
1
baybora.oren

Для конкретной компиляции, которая требует JVM (не по умолчанию /etc/alternatives/Java), рассмотрите возможность добавления префикса mvn к Java_HOME, например так:

Java_HOME=/usr/lib/jvm/Java-7-openjdk-AMD64/ mvn package

Здесь мы предполагаем, что по умолчанию используется Java 8, тогда как для конкретного конкретного проекта нам требуется Java 7.

1
elm

Возможно, вы указали неправильную версию Java . Java-версии (в вашем терминале), чтобы проверить версию Java, которую вы используете . Перейдите в maven-compile-plugin для последнего компилятора maven версия Ваш плагин может выглядеть так, если вы используете Java 6 и последняя версия плагина компилятора maven - 3.1

<plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
0
Henry

Ни один из предыдущих ответов полностью не решил мой вариант использования. 

Необходимо удалить каталог, который был построен. Clean. А затем переустановите. Похоже, молчаливая проблема с разрешениями.

0
piperchester

У меня была эта проблема в IntelliJ IDEA 14, пока я не вошел в меню «Файл» -> «Структура проекта», изменив SDK проекта до 1,7 и уровень языка проекта до 7.

0
Jon Onstott

Хорошо, я тоже решил эту проблему самостоятельно. Ваш Java_HOME важнее, если у вас нет более низкой версии или нет версии по сравнению с исходными/целевыми свойствами из плагина Maven, вы получите эту ошибку.

Убедитесь, что у вас есть хорошая версия в вашем Java_HOME и она включена в ваш PATH.

0
Silviu Burcea

У меня была эта проблема при работе с Eclipse, мне пришлось изменить путь сборки проекта, чтобы он ссылался на JRE 7

0
osama yaccoub