Maven ile Java 7 kodunu derleme


155

Pom dosya listem

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

Ancak üzerine mvn clean install, benim hemen

[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 -version( which javaburada puan)

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 ayrıca doğru Java sürümüne de işaret eder

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

Bu makinede kullanıyorum zsh( echo $0döner -zsh)

Benim .zshrc, ben tanımladım:

 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

Koşarken mvn clean install --debugJava 6 kullandığımı görüyorum

  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

Nerede tanımlanabilir? Kaynak (d) .zshrc birden çok kez var.


2
PATH'niz /usr/bindizin listesinde ilk sırada yok. javac -versionBir dizin belirtmeden deneyin .
Peter Lawrey

@PeterLawrey, anladımjavac 1.7.0_10
James Raitsev

2
echo $JAVA_HOMESize ne anlatıyor?
Andrew Logvinov

2
JAVA_HOME değişkeniniz ne olacak? mvn JAVA_HOME kullanacaktır. Ayrıca, komut satırından mı yoksa IDE içinden mi yapıyorsunuz?
Lucas

8
Maven'i çalıştırırsanız --debug, size çalıştırmak için kullandığı komut satırını javac(tonlarca başka şeyle birlikte) söylemelidir . Ne diyor?
Emil Sit

Yanıtlar:


153

mvnKomutu nasıl oluşturduğunu görmek için maven kurulumunuzdaki komut dosyasını kontrol edin . Belki siz veya bir başkası JAVA_HOMEorada kodlanmış ve unutmuş olabilirsiniz.


8
Siz kazanan sizsiniz. Gerçekten birisi kod içinde JAVA_HOME kodladı! TEŞEKKÜR
EDERİM

21
Heh, bunu daha önce kendime yaptığımdan değil ... :)
Ryan Stewart

4
mvnKomut Oracle'ın JDK 7 benim OSX kurulumu ile uyumlu değildi ve ben bir klasör için (script görünüyor kurduktan şey fantezi yapmadım Library/Java/JavaVirtualMachines/CurrentJDK(exist olduğunu ne yaptığını benim için yoktu jdk1.7.0_25.jdkyerine CurrentJDK). Değil zarif bir düzeltme ama ben sadece ihracat /usr/share/maven/bin/mvn
kodladı

6
OSX 1.9.2 mavericks, maven homebrew ile yüklendi, mvn betiği şu konumda bulundu/usr/local/bin/mvn
What The Heck

1
Bir JAVA_HOME seti vardı ve bu ipucu verdi. TEŞEKKÜRLER!! : D
Alfonso Nishikawa

109

maven derleyici eklentisinin daha yeni bir sürümünü kullanmayı deneyin:

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

ayrıca, maven'de kaynak dosya kodlamasını belirtmek global olarak daha iyi yapılır:

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

EDIT : Bu cevap hala dikkat çekiyor gibi ben sadece en son değerleri (en son düzenleme olarak) maven derleyici eklentisi için 3.2 ve java 8 kodu maven üzerinden derleme hakkında sorular bağlı olduğu gibi işaret etmek istiyorum yakında görünecek :-)


"<version> 3.0 </version>" eklenmesi sorunu çözdü.
Sriram

@radai, onun 3.2 şimdi, ama sürekli artan gibi durmaya devam etmek aptal ...
Lucas

@Lucas - sadece eski sürümlere yapışan insanlardan sorumlu olmak istemiyorum, hepsi bu. kendimle yaşayamadım :-)
radai

Bu sorunun neden sorulan soruya doğru bir çözüm olmadığında neredeyse yüz kadar oyu var? Kayboldum ...
Sıfır3

48

Aynı sorunu yaşadım ve bunu çözmek için şu blog makalesini takip ediyorum: 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

özel tks için @mkyong

EDIT: Şimdi kullanıyorum: jEnv + sdkman


3
Bu benim için çalıştı. Macports ve sun jdk maven ile bir mac kullanıyorum. Görünüşe göre bu açılan zor oldu.
Quantum7

1
Harika iş. Tüm komutlar için teşekkürler! Maveriks şimdi Works
Maksim

1
Bu en kolay ve en zarif çözümdür. Teşekkür ederim!
BK-

26

Lütfen aşağıdaki etiketler için pom.xml dosyasını kontrol edin

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

gerekli jdk sürümünü göstermelidir


19

Maven sürümünü kontrol etmelisiniz:

mvn -version

Maven'in derleme için kullandığı Java sürümünü bulacaksınız. Gerekirse JAVA_HOME'u sıfırlamanız gerekebilir.


19

Ben de aynı problemi yaşadım. Bunun Maven komut dosyasının aşağıdaki CurrentJDK bağlantısına bakması ve 1.6 JDK bulmasından kaynaklandığını gördüm. En son JDK'yı yüklemiş olsanız bile bu çözülmez. Sadece $ HOME / .bash_profile betiğinizde JAVA_HOME'u ayarlayabilseniz de, sembolik bağlantıyı aşağıdaki gibi düzeltmeyi seçtim:

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

CurrentJDK'nın 1.6.0.jdk'yi gösterdiğine dikkat edin

Düzeltmek için aşağıdaki komutları çalıştırdım (yüklü sürümünüzü kontrol etmeli ve buna göre uyarlamalısınız).

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

MVN clean install -debug java 1.6 gösteriyorsa, bu doğru cevaptır
cetnar

4

Teşhis:

Maven'in hangi java sürümünü kullandığını "mvn --version" komutunu kullanarak görebilirsiniz

Debian için çözüm:

Mvn betiği javac (hangi javac) arayarak JAVA_HOME env değişkenini dahili olarak ayarlar. Bu nedenle, aynı anda birden fazla java sürümü yüklüyse, örneğin JDK 6 ve JDK 7 ve "java" alternatifini JDK 7 olarak değiştirmiş olsanız bile, aralarında seçim yapmak için Debian Alternatifleri sistemini kullanın, mvn yine de JDK 6 kullanır. "javac" alternatifini de değiştirmek zorundasınız. Örneğin:

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

DÜZENLE:

Aslında, daha iyi bir çözüm güncelleme java-alternatiflerini kullanmaktır (ör.)

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

https://wiki.debian.org/JavaPackage içinde ayrıntılı olarak açıklandığı için , bu çeşitli Java araçlarına tüm alternatifleri değiştirecektir (bir düzine kadar).


Teşekkürler, tam olarak aradığım şey
evandongen

Teşekkürler, Java sürümünü şu şekilde ayarladıktan sonra kafam karıştı: update-alternuments --config javac
Leonard Saers

2

Daha yeni bir eklenti deneyebilir misiniz; maven sitesinde:

<version>3.0</version>

Aşağıdakileri de gördüm:

<compilerVersion>1.7</compilerVersion>

Çalışmıyor. [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

Daha önce 1.7'yi derlemek için 2.3.2'yi başarılı bir şekilde kullandım ... Ama mümkünse en sonuncuyu kullanmak her zaman iyidir.
Lucas

Daha fazla arandı. Bunu kullanıyorsanız bağımlılık eklentisi yönetiminizi kontrol edin.
Joop Eggen

<pluginDependency>, aynı sayı eklendi
James Raitsev

Bir modül projesi ise, ana proje araştırmaya değer olabilir. Bu durum burada olamaz. Maven java 1.7 ile çalışıyor mu?
Joop Eggen

2

Eclipse'deki Özellikler'de Java derleyici ayarlarını değiştirmeyi deneyin.

Git: Tercihler-> Java-> Derleyici-> Derleyici Uyumluluk Düzeyi-> 1.7 Uygula Tamam

IDE'yi yeniden başlatın.

Proje için Derleyici ayarını onaylayın- Git: Proje Özellikleri-> Java Derleyici-> işaretini kaldırın (Java Derleme yolundaki 'JavaSE-1.6' yürütme ortamından Uyumluluk kullanın.) Ve açılır menüden 1.7 seçeneğini belirleyin. (Zaten 1.7 ise yoksay)

IDE'yi yeniden başlatın.

Sorun devam ederse - Terminaldeki komutu kullanarak ayrı test senaryoları çalıştırın.

mvn -Dtest=<test class name> test

2

İşletim sisteminin burada ne olduğundan emin değilim, ancak varsayılan jvm sistemini geniş olarak ayarlamak için güncelleme-java-alternatifleriyle un debian / ubuntu'yu fütüreden birçok java sürümünü ortadan kaldırabilirsiniz.

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

Yeni bir tane ayarlamak için şunu kullanın:

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

Çoğu uygulama için JAVA_HOME ayarlamanıza gerek yoktur.


2

eclipse ur projesine sağ tıklayın ve "Yapılandırmaları Çalıştır" ı açın. orada jre sürümünü kontrol edin. bazı durumlarda bu, yapı yolundaki sürümü değiştirdikten sonra, tutulmada varsayılan olarak değişmez.


2

(Varsayılan olmayan /etc/alternatives/java) bir JVM gerektiren belirli bir derleme için , mvnkomutun önüne önek eklemeyi düşünün JAVA_HOME,

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

Burada varsayılanın Java 8 olduğunu varsayarken, eldeki belirli proje için Java 7'ye ihtiyacımız var.


Bu benim için en iyi şekilde çalıştı çünkü o zaman GIT'den (veya SCM) indirilen projenin kaynağında yapılan değişikliklere gerek yok
jwilleke

Bu cevap daha fazla oyu hak ediyor. Java7 ve Java 8'i yüklemek ve yeniden yüklemek zorunda kalmadan varsayılan olarak Java 8 olan makinemde Java 7 gerektiren bir kod derlememe yardımcı oldu.
R11G 19:19

1

{JAVA_1_4_HOME} / bin / javacyou da deneyebilirsiniz ...

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

4
Paylaşılan herhangi bir koddaki yolu kodlamamalısınız.
Jan Segre

@Jan Segre, tamam i change it :)
baybora.oren

0

Tamam, ben de bu sorunu kendi başıma çözdüm. JAVA_HOME'unuz daha önemlidir, Maven eklentisinin kaynak / hedef özelliklerine göre daha düşük bir sürüme sahip değilseniz veya hiç sürümünüz yoksa bu hatayı alırsınız.

JAVA_HOME'unuzda iyi bir sürüme sahip olduğunuzdan ve PATH'nize dahil edildiğinden emin olun.


0

Java'nın yanlış bir sürümünü belirtiyor olabilirsiniz. java -version (terminalinizde) kullandığınız java sürümünü kontrol etmek için. En son maven derleyici sürümü için maven-compile-plugin adresine gidin java 6 kullanıyorsanız ve maven derleyici eklentisinin en son sürümü 3.1 ise eklentiniz şu şekilde görünebilir

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

0

Önceki cevapların hiçbiri kullanım durumumu tam olarak çözmedi.

Oluşturulan dizini kaldırmak gerekiyordu. Temiz. Ve sonra yeniden yükleyin. Sessiz bir izin sorunu gibi görünüyor.


0

IntelliJ IDEA 14'te Dosya menüsü -> Proje Yapısı'na girene, proje SDK'sını 1.7'ye ve proje dil seviyesini 7'ye değiştirene kadar bu sorunu yaşadım.


0

Tutulma ile çalışırken bu sorunu yaşadım, jre 7'ye atıfta bulunmak için projenin oluşturma yolunu değiştirmek zorunda kaldım

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.