Mengapa Maven menggunakan JDK 1.6 tetapi java -version saya adalah 1.7

159

Saya baru mengenal pakar, dan juga untuk MacOS.

Saya memiliki pengaturan pakar di terminal saya, dan ketika mendapatkan pengaturan versi (menggunakan mvn -v) sepertinya ia menggunakan JDK 1.6, sementara saya memiliki JDK 1.7 diinstal. Apakah ada yang salah?

Perintah yang saya masukkan adalah ini:

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
sumber
2
Bisakah Anda memposting variabel PATH dan JAVA_HOME Anda?
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 apakah ini yang Anda inginkan, tuan?
Ninja
3
Saya perempuan (jadi menyebut saya "tuan" tidak benar) dan ya. Silakan coba atur JAVA_HOME Anda. Masalah Anda tampaknya mirip dengan masalah ini: stackoverflow.com/questions/13752519/…
Jeanne Boyarsky
2
@JeanneBoyarsky Maafkan kekasaran saya. Url yang Anda berikan adalah masalah yang saya temui. Terima kasih banyak ~
Ninja

Jawaban:

227

tambahkan yang berikut ke ~/.mavenrc:

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

Solusi kedua:

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

Gaurav Vaish
sumber
ya, jawaban Anda benar. JAVAHOME diperlukan. Saya mengedit / etc / profile saja
Ninja
8
Nah, menambahkan ke ~ / .mavenrc memastikan bahwa aplikasi lain tidak terpengaruh. Hanya mvn yang mengambil versi JDK ini. :)
Gaurav Vaish
43
export JAVA_HOME = $ (/ usr / libexec / java_home -v 1.7)
jla
1
solusi .mavenrc bekerja dengan baik untuk saya. Juga menyadari bahwa saya hanya menginstal JDK 1.8 dan bukan JRE 1.8. Gaurav terima kasih!
timothyclifford
2
Jika Anda menggunakan jenv pada mac, itu bisa menjadi: export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"untuk ~/.mavenrcfile.
Eddy
46

Masuk

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

dan perbarui CurrentJDKtautan simbolik ke titik

/Library/Java/JavaVirtualMachines/YOUR_JDK_VERSION/Contents/

Misalnya

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

Sekarang akan bekerja segera.

Oskar
sumber
1
Trik symlink CurrentJDK tampaknya tidak berfungsi lagi dengan maven 3.3.1, tetapi memodifikasi ~ / .mavenrc tidak.
Stefan L
41

Anda juga bisa melakukannya,

<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
sumber
5
Itu tidak bekerja jika pakar menjalankan menggunakan java 6. Itu hanya crash dengan[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

Anda juga dapat secara eksplisit memberi tahu maven versi java mana yang harus dikompilasi. Anda dapat mencoba menambahkan maven-compiler-pluginke pom Anda.

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

Jika Anda mengimpor proyek maven ke IDE, maka mungkin ada pengaturan maven di IDE Anda untuk kompiler default yang digunakan oleh maven runner Anda.

perbaiki
sumber
o, terima kasih. tapi saya belum mulai. Saya hanya 'mvn -v' ... alasannya adalah saya tidak menetapkan JAVA_HOME
Ninja
Perhatikan bahwa hanya memengaruhi kode Anda yang dikompilasi. Saya mengalami masalah ini dan datang ke sini karena perpustakaan eksternal yang saya gunakan dikompilasi untuk Java 7 dan Maven mencoba menjalankannya dengan Java 6
Itu tidak bekerja jika pakar menjalankan menggunakan java 6. Itu hanya crash dengan[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
Ini akan bekerja jika pengaturan maven dalam IDE Anda untuk kompiler default lebih rendah dari 1,7, tetapi jdk yang diinstal lebih tinggi dari 1,7
John Doe
9

Itu membantu saya. Cukup tambahkan di pom.xml Anda.

Secara default plugin compiler maven menggunakan Java 1.5 atau 1.6, Anda harus mendefinisikannya kembali di pom.xml Anda.

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

Untuk Pengguna Eclipse. Jika Anda memiliki Run Configuration yang membersihkan paket misalnya.

Di panel Run Configuration ada tab JRE di mana Anda dapat menentukan terhadap runtime mana yang harus dijalankan. Perhatikan bahwa konfigurasi ini menimpa apa pun yang ada di pom.xml.

Yonatan Abrego
sumber
2

Silakan periksa kompatibilitasnya. Saya berjuang dengan mvn 3.2.1dan jdk 1.6.0_37selama berjam-jam. Semua variabel ditetapkan tetapi tidak berfungsi. Akhirnya saya meningkatkan jdk to 1.8.0_60dan mvn 3.3.3dan itu berhasil. Variabel Lingkungan sebagai berikut:

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

Solusi @MasterGaurav bekerja dengan baik,

Saya biasanya meletakkan hal beralih java ke fungsi 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
}

Kemudian Anda dapat menjalankan java_lsdua dapatkan semua jvm yang tersedia di mesin Anda, jalankan java_use 1.7untuk menggunakan versi 1.7 untuk java dan maven.

Wei Qiu
sumber