ทำไม Maven ใช้ JDK 1.6 แต่ Java -version ของฉันคือ 1.7


159

ฉันใหม่เพื่อ maven และ MacOS

ฉันมีการตั้งค่า maven ใน terminal ของฉันและเมื่อได้รับการตั้งค่ารุ่น (โดยใช้mvn -v) ดูเหมือนว่ามันใช้ JDK 1.6 ในขณะที่ฉันติดตั้ง JDK 1.7 มีอะไรผิดปกติหรือเปล่า?

คำสั่งที่ฉันป้อนคือ:

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"

2
คุณสามารถโพสต์ตัวแปร PATH และ JAVA_HOME ของคุณได้หรือไม่?
Jeanne Boyarsky

@JeanneBoyarsky blues: helloworld Ninja $ echo $ JAVA_HOME blues: helloworld Ninja $ echo $ PATH / usr / bin: / bin: / usr / sbin: / usbin / local / bin: / usr / local / git / bin
Ninja

@JeanneBoyarsky คุณต้องการได้ไหม
Ninja

3
ฉันเป็นผู้หญิง (ดังนั้นการอ้างถึงฉันว่า "ท่าน" ไม่ถูกต้อง) และใช่ โปรดลองตั้งค่า JAVA_HOME ของคุณ ปัญหาของคุณคล้ายกับปัญหานี้: stackoverflow.com/questions/13752519/…
Jeanne Boyarsky

2
@JeanneBoyarsky ให้อภัยความรุนแรงของฉัน URL ที่คุณให้เป็นปัญหาที่ฉันพบขอบคุณมาก ๆ ~
Ninja

คำตอบ:


227

เพิ่มสิ่งต่อไปนี้ในของคุณ~/.mavenrc:

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

ทางออกที่สอง:

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


ใช่คำตอบของคุณถูกต้องจำเป็นต้องใช้ JAVAHOME ฉันจะแก้ไข / etc / profile แทน
Ninja

8
การเพิ่มให้กับ ~ / .mavenrc ช่วยให้มั่นใจได้ว่าแอพอื่น ๆ จะไม่ได้รับผลกระทบ mvn รับเฉพาะ JDK รุ่นนี้เท่านั้น :)
Gaurav Vaish

43
ส่งออก JAVA_HOME = $ (/ usr / libexec / java_home -v 1.7)
2557

1
.mavenrc แก้ปัญหาทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน และฉันก็รู้ว่าติดตั้ง JDK 1.8 เท่านั้นไม่ใช่ JRE 1.8 ขอบคุณ Gaurav!
timothyclifford

2
หากคุณใช้ jenv บน mac อาจเป็น: export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"สำหรับ~/.mavenrcไฟล์
Eddy

46

เข้าสู่

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

และอัปเดตCurrentJDKลิงก์สัญลักษณ์เพื่อชี้ไปที่

/Library/Java/JavaVirtualMachines/YOUR_JDK_VERSION/Contents/

เช่น

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

ตอนนี้มันจะทำงานทันที


1
หลอกลวง symlink CurrentJDK ดูเหมือนจะไม่ทำงานอีกต่อไปกับ maven 3.3.1 แต่การแก้ไข ~ / .mavenrc ทำ
Stefan L

41

คุณยังสามารถทำ

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

5
ไม่สามารถใช้งานได้หาก maven ใช้งานจาวา 6 เพียงเกิดปัญหากับ[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

คุณยังสามารถบอกได้อย่างชัดเจนว่า maven เวอร์ชันใดที่จาวารวบรวม คุณสามารถลองเพิ่มmaven-compiler-pluginpom ของคุณ

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

หากคุณนำเข้าโครงการ Maven ไปยัง IDE อาจมีการตั้งค่า Maven ใน IDE ของคุณสำหรับคอมไพเลอร์เริ่มต้นที่นักวิ่ง Maven ของคุณใช้อยู่


o, ขอบคุณ แต่ฉันยังไม่เริ่ม ฉันแค่ 'mvn -v' ... เหตุผลก็คือฉันไม่ได้กำหนด JAVA_HOME
Ninja

โปรดทราบว่าจะมีผลกับรหัสของคุณที่รวบรวม ฉันพบปัญหานี้และมาที่นี่เพราะห้องสมุดภายนอกที่ฉันใช้กำลังรวบรวมสำหรับ Java 7 และ Maven พยายามเรียกใช้กับ Java 6

ไม่สามารถใช้งานได้หาก maven ใช้งานจาวา 6 เพียงเกิดปัญหากับ[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

สิ่งนี้จะทำงานในกรณีที่การตั้งค่า maven ใน IDE ของคุณสำหรับคอมไพเลอร์เริ่มต้นต่ำกว่า 1.7 แต่ jdk ที่ติดตั้งจะสูงกว่า 1.7
John Doe

9

มันช่วยฉัน เพียงเพิ่มเข้าไปใน pom.xml ของคุณ

ตามค่าเริ่มต้นปลั๊กอินตัวแปล maven ใช้ Java 1.5 หรือ 1.6 คุณจะต้องกำหนดใหม่ใน 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>

4

สำหรับผู้ใช้ Eclipse หากคุณมีการกำหนดค่าการใช้งานที่ไม่ได้ล้างแพคเกจ

ในพาเนลรันคอนฟิกูเรชันมีแท็บ JRE ที่คุณสามารถระบุว่าควรรันรันไทม์ใด โปรดทราบว่าการกำหนดค่านี้จะแทนที่สิ่งที่อยู่ใน pom.xml



2

กรุณาตรวจสอบความเข้ากันได้ ฉันต่อสู้ด้วยmvn 3.2.1และjdk 1.6.0_37หลายชั่วโมง ตัวแปรทั้งหมดถูกตั้งค่าไว้ แต่ไม่ทำงาน ในที่สุดผมก็อัพเกรดjdk to 1.8.0_60และmvn 3.3.3และที่ทำงาน ตัวแปรสภาพแวดล้อมดังต่อไปนี้:

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;

1

@MasterGaurav แก้ปัญหาได้อย่างสมบูรณ์แบบ

ปกติฉันจะใส่สิ่งสลับ java ลงในฟังก์ชั่น 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
}

จากนั้นคุณสามารถเรียกใช้java_lsสองรับ jvm ที่มีอยู่ทั้งหมดบนเครื่องของคุณรันjava_use 1.7เพื่อใช้ 1.7 เวอร์ชันสำหรับทั้ง java และ maven

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