Kompilasi kode Java 7 melalui Maven

155

Daftar file pom saya

<project>
  <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
  ...

Namun mvn clean install, saya mengerti

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] Failure executing javac, but could not parse the error:
javac: invalid target release: 1.7
Usage: javac <options> <source files>

/usr/bin/java -versionadalah ( which javapoin di sini)

java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

javac juga menunjuk ke versi Java yang benar

/usr/bin/javac -> /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/bin/javac

Di mesin ini, saya menggunakan zsh( echo $0pengembalian -zsh)

Di saya .zshrc, saya telah mendefinisikan:

 33 # HOME
 34 JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home
 35 SCALA_HOME=/Library/Scala/current
 36 FORGE_HOME=~/tools/forge/
 37 
 38 # PATH
 39 PATH="/Library/Frameworks/Python.framework/Versions/3.2/bin:${PATH}"
 40 PATH=${PATH}:${JAVA_HOME}/bin
 41 PATH=${PATH}:/bin/
 42 PATH=${PATH}:/sbin/
 43 PATH=${PATH}:/usr/bin/
 44 PATH=${PATH}:/usr/sbin/
 45 PATH=${PATH}:/opt/local/bin/
 46 PATH=${PATH}:/opt/local/sbin/
 47 PATH=${PATH}:/usr/local/git/bin
 48 PATH=${PATH}:/usr/local/git/sbin
 49 PATH=${PATH}:/Applications/Xcode.app/Contents/Developer/usr/bin
 50 PATH=${PATH}:${SCALA_HOME}/bin
 51 PATH=${PATH}:${FORGE_HOME}/bin
 52 
 53 export PATH

Ketika saya menjalankan mvn clean install --debugsaya melihat bahwa sebenarnya saya menggunakan Java 6

  1 Apache Maven 3.0.3 (r1075438; 2011-02-28 11:31:09-0600)
  2 Maven home: /usr/share/maven
  3 Java version: 1.6.0_35, vendor: Apple Inc.
  4 Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Di mana itu bisa didefinisikan? Saya memiliki sumber (d) .zshrc saya beberapa kali.

James Raitsev
sumber
2
PATH Anda tidak memiliki yang /usr/binpertama dalam daftar direktori itu. Coba javac -versiontanpa menentukan direktori.
Peter Lawrey
@PeterLawrey, saya mengertijavac 1.7.0_10
James Raitsev
2
Apa yang echo $JAVA_HOMEmemberitahu Anda?
Andrew Logvinov
2
Bagaimana dengan variabel JAVA_HOME Anda? mvn akan menggunakan JAVA_HOME. Juga, apakah Anda membangun dari baris perintah atau di dalam IDE?
Lucas
8
Jika Anda menjalankan Maven --debug, itu akan memberi tahu Anda baris perintah yang digunakan untuk menjalankan javac(bersama dengan banyak hal lainnya). Apa yang dikatakan?
Emil Sit

Jawaban:

153

Periksa mvnskrip di instalasi pakar Anda untuk melihat bagaimana ia membangun perintah. Mungkin Anda atau orang lain telah menuliskan kode a JAVA_HOMEdi sana dan melupakannya.

Ryan Stewart
sumber
8
Anda adalah pemenangnya. Memang ada seseorang yang memasukkan kode JAVA_HOME di dalam skrip! TERIMA KASIH
James Raitsev
21
Heh, bukannya aku pernah melakukan itu pada diriku sendiri sebelumnya atau apa pun ... :)
Ryan Stewart
4
The mvnScript adalah tidak kompatibel dengan instalasi OSX saya Oracle JDK 7, dan saya tidak melakukan pengaturan itu (naskah penampilan untuk folder sesuatu yang mewah Library/Java/JavaVirtualMachines/CurrentJDKyang tidak ada bagi saya (apa yang lakukan yang ada adalah jdk1.7.0_25.jdkbukan CurrentJDK). Tidak perbaikan yang elegan tapi saya hanya melakukan hardcod pada ekspor dan sekarang berfungsi (PS: maven di OSX sudah /usr/share/maven/bin/mvn)
Raekye
6
OSX 1.9.2 maverick, dengan maven diinstal melalui homebrew, skrip mvn berada di/usr/local/bin/mvn
StackExchange What The Heck
1
Saya punya satu set JAVA_HOME dan ini memberi petunjuk. TERIMA KASIH!! : D
Alfonso Nishikawa
109

coba gunakan versi yang lebih baru dari plugin compiler maven:

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>

juga, menentukan pengkodean file sumber di maven lebih baik dilakukan secara global:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

EDIT : Karena jawaban ini masih mendapatkan perhatian saya hanya ingin menunjukkan bahwa nilai-nilai terbaru (per edit terbaru) adalah 3,2 untuk plugin kompiler maven dan 1,8 untuk java, karena pertanyaan tentang mengkompilasi kode 8 java melalui maven terikat untuk segera muncul :-)

radai
sumber
Menambahkan "<version> 3.0 </version>" memperbaiki masalah.
Sriram
@radai, 3.2 sekarang, tapi konyol untuk terus memperbarui karena tidak akan pernah berhenti meningkat ...
Lucas
@Lucas - hanya tidak ingin bertanggung jawab atas orang-orang yang menggunakan versi yang sudah ketinggalan zaman, itu saja. tidak bisa hidup dengan diriku sendiri :-)
radai
Mengapa jawaban ini memiliki hampir seratus suara ketika itu bukan solusi yang tepat untuk pertanyaan yang diajukan? Saya tersesat ...
Zero3
48

Saya memiliki masalah yang sama dan untuk menyelesaikan ini saya mengikuti artikel blog ini: http://www.mkyong.com/java/how-to-set-java_home-environment-variable-on-mac-os-x/

$ vim .bash_profile 

export JAVA_HOME=$(/usr/libexec/java_home)

$ source .bash_profile

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

tks khusus untuk @mkyong

EDIT: Sekarang saya menggunakan: jEnv + sdkman

eliocapelati
sumber
3
Ini berhasil untuk saya. Saya menggunakan mac, dengan pakar dari macports dan jdk matahari. Rupanya kombo itu rumit.
Quantum7
1
Kerja bagus. Terima kasih atas semua perintahnya! Bekerja sekarang di Maverik
Maksim
1
Ini adalah solusi termudah dan paling elegan. Terima kasih!
BK-
26

Silakan periksa pom.xml Anda untuk tag di bawah ini

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>

harus menunjukkan versi jdk yang diperlukan

pengguna4010880
sumber
19

Anda harus memeriksa versi Maven:

mvn -version

Anda akan menemukan versi Java yang digunakan Maven untuk kompilasi. Anda mungkin perlu mengatur ulang JAVA_HOME jika perlu.

Loi Cao
sumber
19

Saya memiliki masalah yang sama. Saya menemukan bahwa ini karena skrip Maven melihat tautan CurrentJDK di bawah ini dan menemukan 1,6 JDK. Bahkan jika Anda menginstal JDK terbaru, ini tidak diselesaikan. Meskipun Anda bisa mengatur JAVA_HOME di skrip $ HOME / .bash_profile Anda, saya memilih untuk memperbaiki tautan simbolik sebagai berikut:

ls -l /System/Library/Frameworks/JavaVM.framework/Versions/
total 64
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6.0 -> CurrentJDK
drwxr-xr-x  9 root  wheel  306 11 Nov 21:20 A
lrwxr-xr-x  1 root  wheel    1 30 Oct 16:18 Current -> A
lrwxr-xr-x  1 root  wheel   59 30 Oct 16:18 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

Perhatikan bahwa CurrentJDK menunjuk pada 1.6.0.jdk

Untuk memperbaikinya saya menjalankan perintah berikut (Anda harus memeriksa versi yang diinstal dan beradaptasi sesuai).

sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
Chris McCarthy
sumber
Jika mvn clean install -debug memperlihatkan java 1.6, ini adalah jawaban yang benar
cetnar
4

Diagnostik:

Anda dapat melihat versi java mana yang digunakan Maven dengan menjalankan "mvn --version"

Solusi untuk Debian:

Skrip mvn menetapkan variabel env JAVA_HOME secara internal dengan mencari javac (javac mana). Oleh karena itu, jika Anda memiliki beberapa versi java yang diinstal secara bersamaan, misalnya JDK 6 dan JDK 7 dan menggunakan sistem Alternatif Debian untuk memilih di antara mereka, meskipun Anda mengubah alternatif untuk "java" ke JDK 7, mvn masih akan menggunakan JDK 6. Anda harus mengubah alternatif untuk "javac" juga. Misalnya:

# update-alternatives --set javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac

EDIT:

Sebenarnya, solusi yang lebih baik adalah dengan menggunakan pembaruan-java-alternatif (misalnya)

# update-java-alternatives -s java-1.7.0-openjdk-amd64

sebagaimana dirinci dalam https://wiki.debian.org/JavaPackage , karena ini akan mengubah semua alternatif untuk berbagai alat Java (ada sekitar selusin).

pengguna323094
sumber
Terima kasih, hanya apa yang saya cari
evandongen
Terima kasih, saya bingung setelah mengatur versi java dengan: pembaruan-alternatif --config javac
Leonard Saers
2

Bisakah Anda mencoba plugin yang lebih baru; di situs pakar:

<version>3.0</version>

Saya melihat yang berikut ini juga:

<compilerVersion>1.7</compilerVersion>
Joop Eggen
sumber
Tidak bekerja. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project divs: Fatal error compiling: invalid target release: 1.7 -
James Raitsev
Saya telah berhasil menggunakan 2.3.2 untuk mengkompilasi 1.7 sebelumnya ... Tapi selalu baik untuk menggunakan yang terbaru jika mungkin.
Lucas
Pencarian selanjutnya. Periksa manajemen plugin dependensi Anda jika Anda menggunakannya.
Joop Eggen
Ditambahkan <pluginDependency>, masalah yang sama
James Raitsev
Jika ini adalah proyek modul, proyek induk mungkin layak untuk dilihat. Ini tidak mungkin terjadi di sini. Apakah pakar menjalankan dengan java 1.7?
Joop Eggen
2

Cobalah untuk mengubah pengaturan Java compiler di Properties di Eclipse-

Goto: Preferences-> Java-> Compiler-> Level Compiler Compliance-> 1.7 Terapkan Ok

Mulai ulang IDE.

Konfirmasikan pengaturan Compiler untuk project- Goto: Project Properties-> Java Compiler-> Hapus centang (Gunakan Kepatuhan dari lingkungan eksekusi 'JavaSE-1.6' di jalur Build java.) Dan pilih 1,7 dari dropdown. (Abaikan jika sudah 1.7)

Mulai ulang IDE.

Jika masih ada masalah - Jalankan masing-masing uji menggunakan perintah di terminal-

mvn -Dtest=<test class name> test
Mithun Khatri
sumber
2

Tidak yakin apa OS yang digunakan di sini, tetapi Anda dapat menghilangkan banyak versi java meluruskan un debian / ubuntu dengan pembaruan-java-alternatif untuk mengatur lebar sistem jvm default.

#> update-java-alternatives -l
java-1.6.0-openjdk-amd64 1061 /usr/lib/jvm/java-1.6.0-openjdk-amd64
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-6-sun 63 /usr/lib/jvm/java-6-sun
java-7-oracle 1073 /usr/lib/jvm/java-7-oracle

Untuk mengatur yang baru, gunakan:

#> update-java-alternatives -s java-7-oracle

Tidak perlu mengatur JAVA_HOME untuk sebagian besar aplikasi.

Bruce Edge
sumber
2

klik kanan pada proyek Anda di gerhana dan buka "Jalankan Konfigurasi" .. periksa versi jre di sana. beberapa kali ini tidak akan berubah secara default di gerhana, bahkan setelah mengubah versi di buildpath.

ravinder reddy
sumber
2

Untuk kompilasi tertentu yang membutuhkan /etc/alternatives/javaJVM (non-default ), pertimbangkan awalan mvnperintah dengan JAVA_HOMEseperti ini,

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ mvn package

Di sini kita asumsikan defaultnya adalah Java 8, sedangkan untuk proyek spesifik yang sedang kita tangani kita membutuhkan Java 7.

elm
sumber
Ini bekerja paling baik bagi saya karena pada saat itu tidak perlu ada perubahan yang dilakukan pada sumber proyek6 yang diunduh dari GIT (atau SCM)
jwilleke
Jawaban ini layak mendapat lebih banyak upvotes. Ini membantu saya mengkompilasi kode yang membutuhkan Java 7 di mesin saya di mana defaultnya adalah Java 8 - tanpa harus menginstal dan menginstal ulang Java7 dan Java 8.
R11G
1

{JAVA_1_4_HOME} / bin / javacyou juga dapat mencoba ...

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <showDeprecation>true</showDeprecation>
                <showWarnings>true</showWarnings>
                <executable>{JAVA_HOME_1_7}/bin/javac</executable>
                <fork>true</fork>
        </configuration>
    </plugin>
baybora.oren
sumber
4
Anda tidak boleh membuat hardcode jalur pada kode apa pun yang akan dibagikan.
Jan Segre
@ Jan Segre, ok saya ubah :)
baybora.oren
0

Oke, saya baru saja memecahkan masalah ini sendiri. Yang lebih penting adalah JAVA_HOME Anda, jika Anda tidak memiliki versi yang lebih rendah atau tidak sama sekali dibandingkan dengan properti sumber / target dari plugin Maven, Anda akan mendapatkan kesalahan ini.

Pastikan Anda memiliki versi yang bagus di JAVA_HOME Anda dan memasukkannya ke dalam PATH Anda.

Silviu Burcea
sumber
0

Anda mungkin menentukan versi java yang salah. java -versi (di terminal Anda) untuk memeriksa versi java yang Anda gunakan. Pergi ke maven-compile-plugin untuk versi compiler maven terbaru. Plugin Anda mungkin terlihat seperti ini jika Anda menggunakan java 6 dan versi terbaru dari plugin maven compiler adalah 3.1

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
Henry
sumber
0

Tidak ada jawaban sebelumnya yang sepenuhnya menyelesaikan kasus penggunaan saya.

Diperlukan untuk menghapus direktori yang sedang dibangun. Bersih. Kemudian instal ulang. Sepertinya masalah izin diam.

piperchester
sumber
0

Saya mengalami masalah ini di IntelliJ IDEA 14 hingga saya masuk ke menu File -> Struktur Proyek, mengubah SDK proyek menjadi 1,7 dan level bahasa proyek menjadi 7.

Jon Onstott
sumber
0

Saya memiliki masalah ini ketika bekerja dengan gerhana, saya harus mengubah jalur pembangunan proyek sehingga mengacu pada jre 7

osama yaccoub
sumber