Dlaczego Maven używa JDK 1.6, ale moja wersja java to 1.7

159

Jestem nowy w maven, a także w MacOS.

Mam instalatora w moim terminalu i podczas pobierania ustawień wersji (przy użyciu mvn -v) wygląda na to, że używa JDK 1.6, podczas gdy mam zainstalowany JDK 1.7. Czy coś jest nie tak?

Polecenia, które wpisuję, to:

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
źródło
2
Czy możesz opublikować zmienne PATH i JAVA_HOME?
Jeanne Boyarsky
@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, czy tego chcesz, sir?
Ninja
3
Jestem kobietą (więc nazywanie mnie „panem” jest niepoprawne) i tak. Spróbuj ustawić JAVA_HOME. Twój problem wydaje się podobny do tego problemu: stackoverflow.com/questions/13752519/…
Jeanne Boyarsky
2
@JeanneBoyarsky Wybacz moją niegrzeczność. Podany przez Ciebie adres URL jest problemem, z którym się spotykam. Wielkie dzięki ~
Ninja

Odpowiedzi:

227

dodaj do swojego ~/.mavenrc:

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

Drugie rozwiązanie:

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

Gaurav Vaish
źródło
tak, odpowiedź jest prawidłowa. JAVAHOME jest wymagane. Zamiast tego edytuję / etc / profile
Ninja
8
Cóż, dodanie do ~ / .mavenrc zapewnia, że ​​nie ma to wpływu na inne aplikacje. Tylko mvn wybiera tę wersję JDK. :)
Gaurav Vaish
43
export JAVA_HOME = $ (/ usr / libexec / java_home -v 1.7)
jla
1
Rozwiązanie .mavenrc zadziałało idealnie dla mnie. Uświadomiłem sobie również, że mam zainstalowany tylko JDK 1.8, a nie JRE 1.8. Dzięki Gaurav!
timothyclifford
2
Jeśli używasz jenv na komputerze Mac, może to być: export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"for ~/.mavenrcfile.
Eddy
46

Wejść w

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

i zaktualizuj CurrentJDKdowiązanie symboliczne, aby wskazywało

/Library/Java/JavaVirtualMachines/YOUR_JDK_VERSION/Contents/

Na przykład

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

Teraz powinno działać natychmiast.

Oskar
źródło
1
Trik z dowiązaniem symbolicznym CurrentJDK nie wydaje się już działać z maven 3.3.1, ale modyfikacja ~ / .mavenrc tak.
Stefan L
41

Możesz też zrobić,

<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
źródło
5
To nie działa, jeśli maven działa w Javie 6. Po prostu ulega awarii z[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

Możesz również wyraźnie powiedzieć mavenowi, dla której wersji Java ma się skompilować. Możesz spróbować dodać maven-compiler-plugindo 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>

Jeśli zaimportowałeś projekt maven do IDE, prawdopodobnie istnieje ustawienie maven w twoim IDE dla domyślnego kompilatora, którego używa twój maven runner.

redFIVE
źródło
dziękuję. ale ja nie zacząłem. Po prostu `` mvn -v '' ... powód jest taki, że nie przypisuję JAVA_HOME
Ninja
Zauważ, że wpływa tylko na twój kod, który jest kompilowany. Napotkałem ten problem i przyszedłem tutaj, ponieważ zewnętrzna biblioteka, której
To nie działa, jeśli maven działa w Javie 6. Po prostu ulega awarii z[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
To zadziała w przypadku, gdy ustawienie maven w twoim IDE dla domyślnego kompilatora jest niższe niż 1,7, ale zainstalowany jdk jest wyższy niż 1,7
John Doe
9

Pomogło mi. Po prostu dodaj go do swojego pom.xml.

Domyślnie wtyczka kompilatora maven używa Javy 1.5 lub 1.6, musisz ją przedefiniować w swoim 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
źródło
4

Dla użytkowników Eclipse. Jeśli masz uruchomioną konfigurację, która na przykład czyści pakiet.

W panelu Run Configuration znajduje się zakładka JRE, na której można określić, w jakim środowisku uruchomieniowym ma działać. Zauważ, że ta konfiguracja zastępuje wszystko, co jest w pom.xml.

Yonatan Abrego
źródło
2

Sprawdź kompatybilność. Walczyłem mvn 3.2.1i jdk 1.6.0_37przez wiele godzin. Wszystkie zmienne zostały ustawione, ale nie działały. I wreszcie zmodernizowane jdk to 1.8.0_60i mvn 3.3.3, i że pracował. Zmienne środowiskowe w następujący sposób:

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
źródło
1

Rozwiązanie @MasterGaurav działa doskonale,

Zwykle umieszczam przełącznik java w funkcji 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
}

Następnie możesz uruchomić java_lsdwa, aby uzyskać wszystkie dostępne jvm na swoim komputerze, uruchomić, java_use 1.7aby użyć wersji 1.7 zarówno dla java, jak i maven.

Wei Qiu
źródło