Чому 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 blues: helloworld Ninja $ echo $ JAVA_HOME blues: helloworld Ninja $ 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 / profile замість цього
Ninja

8
Добре, додавання до ~ / .mavenrc гарантує, що інші програми не впливають. Лише mvn забирає цю версію JDK. :)
Gaurav Vaish

43
export JAVA_HOME = $ (/ usr / libexec / java_home -v 1.7)
jla

1
рішення .mavenrc для мене прекрасно працювало. Також зрозумів, що у мене встановлено лише JDK 1.8, а не JRE 1.8. Дякую Гаураву!
timothyclifford

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

Тепер він працюватиме негайно.


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]
Gavin S. Yancey

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.


o дякую але я не почав. Я просто '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]
Gavin S. Yancey

Це спрацює у випадку, якщо налаштування Maven у вашому IDE для компілятора за замовчуванням буде нижчим за 1,7, але встановлений jdk вище 1,7
John Doe

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. Якщо у вас є конфігурація запуску, яка чистить пакет, наприклад.

На панелі «Конфігурація запуску» є вкладка 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.