Почему Maven использует JDK 1.6, а моя версия Java равна 1.7

159

Я новичок в Maven, а также в MacOS.

Я установил maven в своем терминале, и при получении настроек версии (используя mvn -v) кажется, что он использует JDK 1.6, в то время как у меня установлен JDK 1.7. Что-то не так?

Команды, которые я ввожу, таковы:

blues:helloworld Ninja$ java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b06)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)`
blues:helloworld Ninja$ mvn -v
Apache Maven 3.1.0 (893ca28a1da9d5f51ac03827af98bb730128f9f2; 2013-06-28 10:15:32+0800)
Maven home: /usr/local/Cellar/maven/3.1.0/libexec
Java version: 1.6.0_51, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: zh_CN, platform encoding: EUC_CN
OS name: "mac os x", version: "10.8.4", arch: "x86_64", family: "mac"
Ниндзя
источник
2
Можете ли вы опубликовать переменные PATH и JAVA_HOME?
Жанна Боярская
@JeanneBoyarsky блюз: helloworld ниндзя $ echo $ JAVA_HOME блюз: helloworld ниндзя $ echo $ PATH / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / local / git / bin
Ниндзя
@JeanneBoyarsky это вы хотите, сэр?
ниндзя
3
Я женщина (так что называть меня "сэр" неверно) и да. Пожалуйста, попробуйте установить свой JAVA_HOME. Ваша проблема похожа на эту проблему: stackoverflow.com/questions/13752519/…
Жанна Боярски
2
@JeanneBoyarsky Прости мою грубость. URL, который ты дал, является проблемой, с которой я встречаюсь. Большое спасибо ~
Ninja

Ответы:

227

добавьте следующее к вашему ~/.mavenrc:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/{jdk-version}/Contents/Home

Второе решение:

echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile

Гаурав Вайш
источник
да, вы отвечаете правильно. Требуется JAVAHOME. Вместо этого я редактирую профиль / etc /
Ninja
8
Что ж, добавление в ~ / .mavenrc гарантирует, что другие приложения не будут затронуты. Только mvn подхватывает эту версию JDK. :)
Гаурав Вайш
43
экспорт JAVA_HOME = $ (/ USR / libexec / java_home -v 1,7)
JLA
1
Решение .mavenrc отлично сработало для меня. Также понял, что у меня был только JDK 1.8, а не JRE 1.8. Спасибо, Гаурав!
Тимотиклиффорд
2
Если вы используете jenv на Mac, это может быть: export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"для ~/.mavenrcфайла.
Эдди
46

Попасть в

/System/Library/Frameworks/JavaVM.framework/Versions

и обновите CurrentJDKсимволическую ссылку, чтобы указать

/Library/Java/JavaVirtualMachines/YOUR_JDK_VERSION/Contents/

Например

cd /System/Library/Frameworks/JavaVM.framework/Versions
sudo rm CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/ CurrentJDK

Теперь это должно сработать немедленно.

Oskar
источник
1
Трюк с символьной ссылкой CurrentJDK больше не работает с maven 3.3.1, но модификация ~ / .mavenrc работает.
Стефан Л
41

Вы также можете сделать,

<properties>
      ...  

      <!-- maven-compiler-plugin , aka JAVA Compiler 1.7 -->
      <maven.compiler.target>1.7</maven.compiler.target>
      <maven.compiler.source>1.7</maven.compiler.source>

      ...  
</properties>
ДЕРЕК ЛИ
источник
5
Это не работает, если Maven работает с использованием Java 6. Это просто сбой с[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Гэвин С. Янси
27

Вы также можете явно указать maven, для какой версии Java нужно скомпилировать. Вы можете попробовать добавить в maven-compiler-pluginсвой пом.

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

Если вы импортировали проект maven в IDE, то, вероятно, в вашей IDE есть настройка maven для компилятора по умолчанию, который использует ваш бегун maven.

redFIVE
источник
о, спасибо. но я не начал Я просто 'mvn -v' ... причина в том, что я не назначаю JAVA_HOME
Ninja
Обратите внимание, что это влияет только на ваш код, который скомпилирован. Я столкнулся с этой проблемой и пришел сюда, потому что используемая мной внешняя библиотека была скомпилирована для Java 7, а Maven пытался запустить ее с Java 6
Это не работает, если Maven работает с использованием Java 6. Это просто сбой с[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Гэвин С. Янси
Это будет работать в случае, если настройка maven в вашей среде IDE для компилятора по умолчанию ниже 1,7, но установленный JDK выше 1,7
Джон Доу
9

Это помогло мне. Просто добавьте его в свой pom.xml.

По умолчанию плагин компилятора maven использует Java 1.5 или 1.6, вы должны переопределить его в вашем pom.xml.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
Сергей Лучко
источник
4

Для пользователей Eclipse. Если у вас есть Run Configuration, которая очищает пакет, например.

На панели «Конфигурация запуска» есть вкладка JRE, где вы можете указать, с какой средой выполнения он должен работать. Обратите внимание, что эта конфигурация переопределяет все, что находится в файле pom.xml.

Йонатан Абрего
источник
2

Пожалуйста, проверьте совместимость. Я боролся с mvn 3.2.1и jdk 1.6.0_37много часов. Все переменные были установлены, но не работали. Наконец-то я обновился jdk to 1.8.0_60и все mvn 3.3.3заработало. Переменные среды как следующие:

JAVA_HOME=C:\ProgramFiles\Java\jdk1.8.0_60 
MVN_HOME=C:\ProgramFiles\apache-maven\apache-maven-3.3.3 
M2=%MVN_HOME%\bin extend system level Path- ;%M2%;%JAVA_HOME%\bin;
Викас Сингх
источник
1

Решение @MasterGaurav отлично работает,

Я обычно помещаю java-переключатель в функцию zsh:

alias java_ls='/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'

function java_use() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    echo export "JAVA_HOME=$(/usr/libexec/java_home -v $1)" > ~/.mavenrc
    export PATH=$JAVA_HOME/bin:$PATH
    java -version
}

Затем вы можете запустить java_lsдва, получить все доступные jvm на вашем компьютере, запустить, java_use 1.7чтобы использовать версию 1.7 для java и maven.

Вэй Цю
источник