web-dev-qa-db-fra.com

Java_home à Maven

Quand j'ai couru mvn -version, J'ai remarqué le Java_home pointe vers ...jdk\jre (comme indiqué ci-dessous). Est-ce faux? N'est-il pas censé pointer vers ...\jdk.x.y.z (sans le \jre)? Si oui, comment le réinitialiser? (En global %Java_home% pointe vers le répertoire jdk)

C:\Users\Owner>mvn -version
Apache Maven 2.2.1 (r801777; 2009-08-06 15:16:01-0400)
Java version: 1.7.0_17
Java home: C:\Program Files\Java\jdk1.7.0_17\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7" version: "6.1" Arch: "AMD64" Family: "windows"
35
One Two Three

Non, ce n'est pas faux. Il pointe vers le JRE utilisé par votre JDK, ce qu'il est censé faire. Si vous imprimez Java_HOME en dehors de maven, il devrait s'imprimer correctement:

C:\>echo %Java_HOME%
C:\Program Files\Java\jdk1.7.0_07

C:\>mvn -version
Apache Maven 3.0.4 (r1232337; 2012-01-17 10:44:56+0200)
Maven home: C:\APPS\Apache-maven-3.0.4\bin\..
Java version: 1.7.0_07, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_07\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", Arch: "AMD64", family: "windows"
C:\>

Donc, fondamentalement, Java_HOME doit pointer vers une installation JDK (maven a besoin du tools.jar) mais maven utilise en fait le jre dans le JDK pour s'exécuter.

Lors de l'utilisation de mvn -version, maven utilise Java propriété Java.home interne, comme le montre code source :

version.append( "Java home: " + System.getProperty( "Java.home", "<unknown Java home>" ) ).append( LS );

Cette propriété n'est pas la même chose que le paramètre d'environnement Java_HOME, elle peut donc vous tromper. Il s'agit en fait d'une propriété dynamique vous montrant quel JRE exécute votre code. Si vous compilez et exécutez une classe de test Test.Java imprimant la même chose, vous pouvez voir que si votre Java_HOME pointe vers un JDK, la valeur de Java.home n'est pas égale à votre Java_HOME. C'est attendu.

Citant this :

Quelle est la différence entre Java_HOME et Java.home?

Java_HOME est le répertoire d'installation JDK, par exemple, C:\jdk5. Il est destiné à être défini comme une variable d'environnement et référencé dans des fichiers batch Windows ou des scripts Unix. Je l'ai toujours dans mon panneau de configuration Windows et mes fichiers .tcsh, ainsi que d'autres variables d'environnement courantes. Certaines applications Java utilisent le nom jdk.home à cet effet, qui je pense est un meilleur nom. Mais Java_HOME est utilisé depuis le début et est maintenant une convention.

Java.home est le répertoire d'installation de JRE, par exemple C:\jdk5\jre ou C:\Program Files\Java\jre1.5.0_06. Contrairement à Java_HOME, je n'ai jamais vu Java.home comme une variable d'environnement. Java.home est une propriété système intégrée Java, dont la valeur est le répertoire d'installation JRE. Étant donné que toutes les propriétés système Java sont également exposées en tant que propriétés de génération Ant) , vous pouvez également utiliser $ {Java.home} dans les fichiers de construction.

Est-ce que jre.home serait un meilleur nom? Peut-être, mais je ne pense pas que Sun le changera.

Vous pouvez voir que maven utilise Java_HOME sur mvn.bat:

:endInit
SET MAVEN_Java_EXE="%Java_HOME%\bin\Java.exe"
..
%MAVEN_Java_EXE% %MAVEN_OPTS% -classpath %CLASSWORLDS_JAR% ..

Et si vous voulez vous en assurer, vous pouvez commenter l'instruction "@echo off" dans mvn.bat, afin que vous puissiez voir qu'elle est utilisée.


TL; DR: Sur la base des informations que vous avez fournies, votre configuration est correcte, pas besoin de changer quoi que ce soit.


Edit: grâce à ce fil, il y avait aussi n problème à ce sujet déroutant , ce qui a entraîné un changement de sortie pour la version 3.5.4 de Maven.

61
eis

Ce qui m'a aidé à déboguer les problèmes mvn/jdk, c'est de régler cela avant d'exécuter mvn: set MAVEN_BATCH_ECHO=on

Vous obtenez une sortie détaillée (sur Windows), y compris des informations sur la façon dont Maven choisit Java.

0