รวบรวมรหัส Java 7 ผ่าน Maven


155

รายการไฟล์ pom ของฉัน

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

อย่างไรก็ตามเมื่อmvn clean installฉันได้รับ

[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 javaคะแนนที่นี่)

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 ยังชี้ไปยังเวอร์ชัน Java ที่ถูกต้อง

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

บนเครื่องนี้ฉันกำลังใช้zsh( echo $0ส่งคืน-zsh)

ในตัวฉัน.zshrcฉันได้กำหนด:

 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

เมื่อฉันใช้mvn clean install --debugฉันเห็นว่าจริงๆแล้วฉันใช้ 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

มันจะกำหนดได้ที่ไหน? ฉันมีแหล่งที่มา (d) .zshrc ของฉันหลายครั้ง


2
PATH ของคุณไม่มี/usr/binอยู่ในรายการไดเรกทอรีก่อน ลองjavac -versionโดยไม่ระบุไดเรกทอรี
Peter Lawrey

@ PeterLawrey ฉันได้รับjavac 1.7.0_10
James Raitsev

2
สิ่งที่ไม่echo $JAVA_HOMEบอกคุณ?
Andrew Logvinov

2
แล้วตัวแปร JAVA_HOME ของคุณล่ะ? mvn จะใช้ JAVA_HOME นอกจากนี้คุณกำลังสร้างจากบรรทัดคำสั่งหรือภายใน IDE?
ลูคัส

8
หากคุณเรียกใช้ Maven ด้วย--debugคุณควรบอกบรรทัดคำสั่งที่แน่นอนที่ใช้เพื่อเรียกใช้javac(พร้อมกับสิ่งอื่น ๆ มากมาย) มันพูดว่าอะไร?
Emil Sit

คำตอบ:


153

ตรวจสอบmvnสคริปต์ในการติดตั้ง maven ของคุณเพื่อดูว่ามันสร้างคำสั่งอย่างไร บางทีคุณหรือคนอื่นได้รหัสยากJAVA_HOMEในและมีลืมมัน


8
คุณเป็นผู้ชนะ อันที่จริงมีคน hardcoded JAVA_HOME ภายในสคริปต์! ขอบคุณ
James Raitsev

21
เฮ้ไม่ใช่ว่าฉันเคยทำแบบนั้นกับตัวเองมาก่อนหรืออะไร ... :)
Ryan Stewart

4
mvnสคริปต์เข้ากันไม่ได้กับการติดตั้ง OSX ของฉันของออราเคิล JDK 7 และฉันไม่ได้ทำตั้งขึ้น (รูปลักษณ์สคริปต์สำหรับโฟลเดอร์อะไรแฟนซีLibrary/Java/JavaVirtualMachines/CurrentJDKที่ไม่ได้อยู่สำหรับผม (สิ่งที่ไม่เป็นที่มีอยู่jdk1.7.0_25.jdkแทนCurrentJDK). ไม่ การแก้ไขที่สง่างาม แต่ฉันเพิ่ง hardcoded การส่งออกและตอนนี้มันใช้งานได้ (PS: maven บน OSX อยู่ที่/usr/share/maven/bin/mvn)
Raekye

6
OSX 1.9.2 mavericks ที่ติดตั้ง maven ผ่าน homebrew สคริปต์ mvn ตั้งอยู่ที่/usr/local/bin/mvn
StackExchange What The Heck

1
ฉันมีชุด JAVA_HOME และสิ่งนี้ให้เบาะแส ขอบคุณ !! : D
Alfonso Nishikawa

109

ลองใช้ปลั๊กอินคอมไพเลอร์ maven รุ่นใหม่กว่า:

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

นอกจากนี้การระบุการเข้ารหัสไฟล์ต้นฉบับใน maven จะทำได้ดีกว่าทั่วโลก:

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

แก้ไข : เนื่องจากคำตอบนี้ยังคงได้รับความสนใจฉันต้องการชี้ให้เห็นว่าค่าล่าสุด (ณ วันที่แก้ไขล่าสุด) คือ 3.2 สำหรับปลั๊กอิน maven คอมไพเลอร์และ 1.8 สำหรับ java เป็นคำถามเกี่ยวกับการรวบรวมรหัส java 8 ผ่าน maven ถูกผูกไว้กับ ปรากฏขึ้นเร็ว ๆ นี้ :-)


การเพิ่ม "<version> 3.0 </version>" เป็นการแก้ไขปัญหา
ศรีราม

@radai, 3.2 ในขณะนี้ แต่โง่เพื่อให้การปรับปรุงในขณะที่มันจะไม่หยุดที่เพิ่มขึ้น ...
ลูคัส

@Lucas - เพียงแค่ไม่ต้องการรับผิดชอบคนที่ติดอยู่กับรุ่นที่ล้าสมัยนั่นคือทั้งหมด ไม่สามารถอยู่กับตัวเองได้ :-)
รัศมี

ทำไมคำตอบนี้จึงมีเกือบร้อย upvotes เมื่อไม่ได้ตอบคำถามที่ถูกต้อง? ฉันหายไป ...
zero3

48

ฉันมีปัญหาเดียวกันและเพื่อแก้ไขปัญหานี้ฉันติดตามบทความบล็อกนี้: 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 พิเศษให้กับ@ mongong

แก้ไข: ตอนนี้ฉันกำลังใช้: jEnv + sdkman


3
สิ่งนี้ใช้ได้สำหรับฉัน ฉันใช้ mac กับ maven จาก macports และ sun jdk เห็นได้ชัดว่าคำสั่งผสมนั้นยุ่งยาก
Quantum7

1
การทำงานที่ดี. ขอบคุณสำหรับคำสั่งทั้งหมด! ใช้ได้กับ Maveriks
Maksim

1
นี่คือทางออกที่ง่ายที่สุดและสง่างามที่สุด ขอบคุณ!
BK-

26

โปรดตรวจสอบ pom.xml สำหรับแท็กด้านล่าง

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

ควรชี้เวอร์ชัน jdk ที่ต้องการ


19

คุณต้องตรวจสอบเวอร์ชั่น Maven:

mvn -version

คุณจะพบเวอร์ชัน Java ที่ Maven ใช้สำหรับการรวบรวม คุณอาจต้องรีเซ็ต JAVA_HOME หากจำเป็น


19

ผมมีปัญหาเหมือนกัน. ฉันพบว่าเป็นเพราะสคริปต์ Maven ดูที่ลิงค์ CurrentJDK ด้านล่างและพบ 1.6 JDK แม้ว่าคุณจะติดตั้ง JDK ล่าสุดสิ่งนี้จะไม่ได้รับการแก้ไข ในขณะที่คุณสามารถตั้งค่า JAVA_HOME ในสคริปต์ $ HOME / .bash_profile ของคุณฉันเลือกที่จะแก้ไขลิงก์สัญลักษณ์แทนดังนี้:

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 ชี้ที่ 1.6.0.jdk

เพื่อแก้ไขฉันรันคำสั่งต่อไปนี้ (คุณควรตรวจสอบเวอร์ชันที่ติดตั้งของคุณและปรับให้สอดคล้อง)

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 ติดตั้งแสดง -debug java 1.6 นี้เป็นคำตอบที่ถูกต้อง
cetnar

4

การวินิจฉัย:

คุณสามารถดูรุ่น Java Maven ที่ใช้โดยการเรียกใช้ "mvn --version"

โซลูชันสำหรับเดเบียน:

สคริปต์ mvn ตั้งค่าตัวแปร env JAVA_HOME เป็นการภายในโดยค้นหา javac (ซึ่ง javac) ดังนั้นหากคุณติดตั้ง Java หลายเวอร์ชันพร้อมกันเช่น JDK 6 และ JDK 7 และใช้ระบบ Debian Alternatives เพื่อเลือกระหว่างพวกเขาแม้ว่าคุณจะเปลี่ยนทางเลือกสำหรับ "java" เป็น JDK 7 mvn จะยังคงใช้ JDK 6 คุณ ต้องเปลี่ยนทางเลือกสำหรับ "javac" ด้วย เช่น:

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

แก้ไข:

ที่จริงแล้วทางออกที่ดีกว่าคือการใช้ update-java-ทางเลือก (เช่น)

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

ดังรายละเอียดในhttps://wiki.debian.org/JavaPackageเพราะจะเปลี่ยนทางเลือกทั้งหมดเป็นเครื่องมือ Java ต่างๆ (มีโหลหรือมากกว่านั้น)


ขอบคุณสิ่งที่ฉันกำลังมองหา
evandongen

ขอบคุณฉันสับสนหลังจากตั้งรุ่น java ด้วย: update-Alternative
--config

2

คุณสามารถลองปลั๊กอินตัวใหม่กว่า; บนเว็บไซต์ Maven:

<version>3.0</version>

ฉันเห็นสิ่งต่อไปนี้ด้วย:

<compilerVersion>1.7</compilerVersion>

ไม่ทำงาน, ไม่เป็นผล. [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

ฉันใช้ 2.3.2 เพื่อคอมไพล์ 1.7 มาก่อนเรียบร้อยแล้ว ... แต่ก็ดีเสมอที่จะใช้เวอร์ชั่นล่าสุดถ้าเป็นไปได้
ลูคัส

ค้นหาเพิ่มเติม ตรวจสอบการจัดการปลั๊กอินพึ่งพาของคุณหากคุณใช้สิ่งนั้น
Joop Eggen

เพิ่ม <pluginDependency> ฉบับเดียวกัน
James Raitsev

หากเป็นโครงการโมดูลโครงการหลักอาจคุ้มค่าที่จะดู กรณีนี้ไม่ได้ Maven ทำงานด้วย java 1.7 หรือไม่
Joop Eggen

2

ลองเปลี่ยนการตั้งค่าคอมไพเลอร์ Java ใน Properties ใน Eclipse-

ไปที่: การตั้งค่า -> Java-> คอมไพเลอร์ -> คอมไพเลอร์มาตรฐานระดับ -> 1.7 ใช้ตกลง

รีสตาร์ท IDE

ยืนยันการตั้งค่าคอมไพเลอร์สำหรับโปรเจ็กต์ - ไปที่: คุณสมบัติของโครงการ -> Java คอมไพเลอร์ -> ยกเลิกการเลือก (ใช้การปฏิบัติตามข้อกำหนดจากสภาพแวดล้อมการดำเนินการ 'JavaSE-1.6' บนเส้นทาง Java Build) และเลือก 1.7 จากดรอปดาวน์ (ไม่ต้องสนใจถ้า 1.7 อยู่แล้ว)

รีสตาร์ท IDE

หากปัญหายังคงมีอยู่ให้รันกรณีทดสอบแต่ละรายการโดยใช้คำสั่งในเทอร์มินัล

mvn -Dtest=<test class name> test

2

ไม่แน่ใจว่ามีการใช้ระบบปฏิบัติการอะไรที่นี่ แต่คุณสามารถกำจัดจาวารุ่นใหม่จำนวนมากไม่รวมเดเบียน / อูบุนตูพร้อมด้วยทางเลือกการอัพเดทจาวา - อูบุนตูเพื่อตั้งค่าระบบ jvm เริ่มต้นที่กว้าง

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

ในการตั้งค่าใหม่ให้ใช้:

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

ไม่จำเป็นต้องตั้งค่า JAVA_HOME สำหรับแอปส่วนใหญ่


2

คลิกขวาที่โครงการของคุณใน eclipse และเปิด "เรียกใช้การกำหนดค่า" .. ตรวจสอบรุ่น jre ที่นั่น บางครั้งสิ่งนี้จะไม่เปลี่ยนแปลงตามค่าเริ่มต้นใน eclipse หลังจากเปลี่ยนเวอร์ชันใน buildpath


2

สำหรับการรวบรวมเฉพาะที่ต้องการ/etc/alternatives/javaJVM (ไม่ใช่ค่าเริ่มต้น) ให้พิจารณาคำนำหน้าmvnคำสั่งด้วยJAVA_HOMEเช่นนี้

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

ที่นี่เราถือว่าค่าเริ่มต้นคือ Java 8 ในขณะที่โครงการเฉพาะในมือเราต้องการ Java 7


นี้ทำงานที่ดีที่สุดสำหรับฉันเป็นแล้วมีไม่จำเป็นต้องมีการเปลี่ยนแปลงการดำเนินการกับแหล่งที่มาของ Project6 ที่ดาวน์โหลดจาก GIT (หรือ SCM)
jwilleke

คำตอบนี้สมควรได้รับการโหวตมากขึ้น มันช่วยให้ฉันรวบรวมรหัสที่ต้องการ Java 7 บนเครื่องของฉันที่เริ่มต้นคือ Java 8 - โดยไม่ต้องติดตั้งและติดตั้ง Java7 และ Java 8 อีกครั้ง
R11G

1

{JAVA_1_4_HOME} / bin / javacyou สามารถลอง ...

<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
คุณไม่ควร hardcode เส้นทางบนรหัสใด ๆ ที่จะถูกแชร์
Jan Segre

@ Jan Segre ตกลงฉันเปลี่ยน :)
baybora.oren

0

ตกลงฉันเพิ่งแก้ไขปัญหานี้ด้วยตัวเองเช่นกัน มันสำคัญกว่า JAVA_HOME ของคุณหากคุณไม่มีเวอร์ชันที่ต่ำกว่าหรือไม่มีเลยเมื่อเทียบกับคุณสมบัติต้นทาง / ปลายทางจากปลั๊กอิน Maven คุณจะได้รับข้อผิดพลาดนี้

อย่าลืมมีเวอร์ชั่นที่ดีใน JAVA_HOME ของคุณและรวมไว้ใน PATH ของคุณด้วย


0

คุณอาจกำลังระบุจาวาเวอร์ชันที่ไม่ถูกต้อง java -version (ในเทอร์มินัลของคุณ) เพื่อตรวจสอบเวอร์ชันของจาวาที่คุณใช้อยู่ ไปที่maven-compile-pluginสำหรับเวอร์ชันล่าสุด maven compiler ปลั๊กอินของคุณอาจปรากฏเช่นนี้หากคุณใช้ java 6 และปลั๊กอิน maven compiler เวอร์ชันล่าสุดคือ 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>

0

คำตอบก่อนหน้านี้ไม่ได้แก้ไขกรณีการใช้งานของฉันอย่างสมบูรณ์

จำเป็นต้องลบไดเรกทอรีที่ถูกสร้างขึ้น สะอาด จากนั้นติดตั้งใหม่ ดูเหมือนว่าปัญหาการอนุญาตเงียบ


0

ฉันมีปัญหานี้ใน IntelliJ IDEA 14 จนกระทั่งฉันเข้าสู่เมนูไฟล์ -> โครงสร้างโครงการเปลี่ยน SDK โครงการเป็น 1.7 และระดับภาษาของโครงการเป็น 7


0

ฉันมีปัญหานี้เมื่อทำงานกับ eclipse ฉันต้องเปลี่ยนเส้นทางการสร้างของโครงการเพื่อที่จะอ้างถึง jre 7

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.