Erro de OSX de instalação do Maven não suportado major.minor versão 51.0

114

Eu instalei o maven seguindo estes passos: (um tutorial)

JAVA_HOME=/Library/Java/Home
export M2_HOME=/Users/steven/zimmermann/maven
export M2=$M2_HOME/bin
export PATH=$M2:$PATH

echo $JAVA_HOME
echo $M2_HOME
echo $M2
echo $PATH

nano .bash_profile

então eu escrevi o eco no sth .bash_profile assim:

JAVA_HOME=/usr/libexec/java_home
M2_HOME=/path/to/your/apache-maven-3.x.x
M2=/path/to/your/apache-maven-3.x.x/bin
PATH=/path/to/maven/bin:/$….bla-bla-bla

e também escrevi isso no .bashrc

export M2_HOME=/Users/steven/zimmermann/maven
export M2=$M2_HOME/bin
export PATH=$M2:$PATH

agora, quando quero verificar a versão ( mvn -v), recebo a seguinte exceção: Acho que algumas versões estão erradas, mas não sei.

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:401)
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:254)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
    at org.codehaus.plexus.classworlds.launcher.Launcher.getMainClass(Launcher.java:144)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:266)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

Informação adicional:

java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
javac -version
javac 1.8.0_40
Steven
fonte
2
TL; DR: a versão Java é antiga. Use Java-1.7 +
Ajeet Ganga

Respostas:

275

O problema é que você não configurou JAVA_HOME no Mac corretamente. Para fazer isso, você deve defini-lo assim:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home

No meu caso, minha instalação do JDK é jdk1.8.0_40, certifique-se de digitar a sua.

Então você pode usar comandos maven.

Saudações!

GerSua
fonte
15
Também observo que a versão atual do Maven3 precisa do Java7, pelo menos recebi essa mensagem de erro quando JAVA_HOME foi configurado corretamente, mas para um JDK Java 1.6.
Steve Powell
Eu precisava export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/"do meu .profile.
aliteralmind de
No meu caso, o dir /Library/Java/JavaVirtualMachinesestá vazio ... o que devo fazer? psjava -version java version "1.6.0_65" Java(TM) SE Runtime Environment (build 1.6.0_65-b14-466.1-11M4716) Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-466.1, mixed mode)
LittleLittleQ
1
você deve adicionar isso ao seu arquivo .profile ou .bash_profile dependendo da versão do Mac OS X que você possui.
Pacu,
também, se adicionado a .profile ou .bash_profile, lembre-se de fechar seu terminal / iniciar um novo terminal para que o conteúdo deste arquivo seja executado novamente.
jotadepicas
16

Por favor, tente:

$JAVA_HOME/bin/java -version

Maven usa $JAVA_HOMEpara resolução de classpath de bibliotecas JRE. Para ter certeza de usar um determinado JDK, defina-o explicitamente antes de compilar, por exemplo:

export JAVA_HOME=/usr/java/jdk1.7.0_51

Não existe uma versão <1.7 e você está usando o Maven 3.3.1? Nesse caso, o motivo é um novo pré-requisito: https://issues.apache.org/jira/browse/MNG-5780

René
fonte
Ei, atualmente estou lutando com o mesmo problema. O que você quer dizer com "Não existe uma versão <1.7"? Estou usando o Java 1.6, é muito antigo? E a segunda pergunta: eu não tenho uma pasta "java" em "/ usr", apenas em Sistema / Biblioteca? Qualquer ajuda seria muito apreciada
Frederik Witte
6
A partir do Maven 3.3, há um requisito mínimo JDK 1.7. Se você quiser compilar com o JDK 1.6, terá que ficar preso no Maven 3.2.5 ou menos.
René
1
Já comecei a trabalhar :) Eu tinha o JDK 1.7 instalado, mas JAVA_HOME estava se referindo ao jdk 1.6
Frederik Witte
7

Uma $HOME/.zshrcsolução dinâmica , se você gosta de mim, ou seja. Linux @ work; MBP / A @ home

if [[ $(uname) == "Darwin" ]]; then export OSX=1; fi
if [[ $(uname) ==  "Linux" ]]; then export LINUX=1; fi

if [[ -n $OSX ]]; then
        export JAVA_HOME=$(/usr/libexec/java_home)
else
        export JAVA_HOME=/usr/lib/jvm/default-java
fi
Evandrix
fonte
O problema aqui NÃO é que java_home está definido. Está definido, mas a versão é antiga.
Ajeet Ganga
no osx obtenha primeiro o jdk mais recente - oracle.com/technetwork/java/javase/downloads/…
lfender6445
3

Resolvi colocando uma versão antiga do maven (2.x), usando brew:

brew uninstall maven
brew tap homebrew/versions 
brew install maven2
Javaboygo
fonte
2

No Eclipse, você não precisa mudar JAVA_HOME, você só precisa mudar a configuração de execução do Maven para algo acima de 1.6 (mesmo se seu projeto estiver em Java 6, o Maven não deveria estar). Clique com o botão direito do mouse no projeto, escolha Maven Build ou Run As> Run Configurations e defina a versão correta do JDK.

Noumenon
fonte
0

Faça isso em seu .profile -

export JAVA_HOME = `/ usr / libexec / java_home`

(backticks certifique-se de executar o comando e colocar seu valor em JAVA_HOME)

Pradeep
fonte