Por que o Maven usa o JDK 1.6, mas minha versão do java é 1.7

159

Eu sou novo no Maven e também no MacOS.

Eu configurei o maven no meu terminal e, ao obter as configurações da versão (usando mvn -v), parece que ele usa o JDK 1.6, enquanto o JDK 1.7 está instalado. Há algo errado?

Os comandos que eu insiro são estes:

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"
Ninja
fonte
2
Você pode postar suas variáveis ​​PATH e JAVA_HOME?
Jeanne Boyarsky 15/09
@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
Ninja
@JeanneBoyarsky é isso que você quer, senhor?
Ninja
3
Eu sou mulher (portanto, referir-me a mim como "senhor" está incorreta) e sim. Por favor, tente configurar seu JAVA_HOME. Seu problema parece semelhante a este problema: stackoverflow.com/questions/13752519/…
Jeanne Boyarsky 15/13
2
@JeanneBoyarsky Perdoe minha rudeness.The url lhe dado é o meet.Thanks problema que um monte ~
Ninja

Respostas:

227

adicione o seguinte ao seu ~/.mavenrc:

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

Segunda solução:

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

Gaurav Vaish
fonte
sim, você resposta está correta .A JAVAHOME é required.I editar o / etc / profile vez
Ninja
8
Bem, adicionar ao ~ / .mavenrc garante que outros aplicativos não sejam afetados. Somente o mvn pega essa versão do JDK. :)
Gaurav Vaish
43
exportar JAVA_HOME = $ (/ usr / libexec / java_home -v 1.7)
jla
1
A solução .mavenrc funcionou perfeitamente para mim. Também percebi que eu só tinha o JDK 1.8 instalado e não o JRE 1.8. Graças à Gaurav!
timothyclifford
2
Se você estiver usando o jenv em um mac, pode ser: export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"para ~/.mavenrcarquivo.
Eddy
46

Entrar

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

e atualize o CurrentJDKlink simbólico para apontar para

/Library/Java/JavaVirtualMachines/YOUR_JDK_VERSION/Contents/

Por exemplo

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

Agora deve funcionar imediatamente.

Oskar
fonte
1
O truque de link simbólico CurrentJDK parece não funcionar mais com o maven 3.3.1, mas modificar ~ / .mavenrc funciona.
23815 Stefan L
41

Você também pode fazer,

<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>
DEREK LEE
fonte
5
Isso não funciona se maven está sendo executado usando java 6. É só trava com[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

Você também pode dizer explicitamente ao maven qual versão do Java compilar. Você pode tentar adicionar o maven-compiler-pluginao seu pom.

<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>

Se você importou um projeto maven para um IDE, provavelmente há uma configuração maven no seu IDE para o compilador padrão que o maven runner está usando.

redFIVE
fonte
obrigado. mas eu não comecei. Eu apenas 'mvn -v' ... o motivo é que eu não atribuo JAVA_HOME
Ninja
Observe que afeta apenas o seu código compilado. Corri para este problema e veio aqui, porque uma biblioteca externa que eu estava usando foi compilado para Java 7 e Maven estava tentando executá-lo com Java 6
Isso não funciona se maven está sendo executado usando java 6. É só trava com[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
Isto irá funcionar em configuração de maven caso em seu IDE para compilador padrão é menor do que 1,7, mas o jdk instalado é maior do que 1,7
John Doe
9

Isso me ajudou. Basta adicioná-lo ao seu pom.xml.

Por padrão, o plug-in do compilador maven usa Java 1.5 ou 1.6, você precisa redefini-lo no seu 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>
Sergey Luchko
fonte
4

Para usuários do Eclipse. Se você possui uma Configuração de Execução que limpa o pacote, por exemplo.

No painel Configuração de Execução, há uma guia JRE na qual é possível especificar em qual tempo de execução deve ser executado. Observe que essa configuração substitui o que estiver no pom.xml.

Yonatan Abrego
fonte
2

Por favor, verifique a compatibilidade. Eu lutei com mvn 3.2.1e jdk 1.6.0_37por muitas horas. Todas as variáveis ​​foram definidas, mas não estavam funcionando. Finalmente eu atualizado jdk to 1.8.0_60e mvn 3.3.3e que trabalhou. Variáveis ​​de ambiente da seguinte forma:

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;
Vikas Singh
fonte
1

A solução da @MasterGaurav está funcionando perfeitamente,

Eu normalmente coloco a coisa do switch java em uma função 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
}

Em seguida, você pode executar java_lsdois, obter toda a jvm disponível em sua máquina, executar java_use 1.7para usar a versão 1.7 para java e maven.

Wei Qiu
fonte