मावेन के लिए विशिष्ट जावा संस्करण कैसे सेट करें


162

मेरी मशीन पर मेरे पास दो जावा संस्करण स्थापित हैं: (1.6 और 1.7 मेरे द्वारा मैन्युअल रूप से स्थापित)। मुझे अलग-अलग प्रोजेक्ट्स के लिए दोनों की जरूरत है। लेकिन मावेन के लिए मुझे 1.7 की जरूरत है, अब मेरा मावेन 1,6 जावा संस्करण का उपयोग करता है, मैं मावेन को 1.7 का उपयोग करने के लिए कैसे सेट कर सकता हूं?


मैं जावा 1.7 के साथ JAVA_HOME निर्यात नहीं कर सकता क्योंकि मैं अपनी मशीन के विन्यास को नहीं छू सकता, जावा का डिफ़ॉल्ट संस्करण 1.6 होना चाहिए।
औरपाट

मावेन JAVA_HOME का उपयोग करता है इसलिए यह न सोचें कि आप जो करना चाहते हैं वह JAVA_HOME मान को बदले बिना संभव है।
जियागा

1
क्या आप एक आईडीई या कमांड लाइन का उपयोग कर रहे हैं? आप एक * निक्स या विंडोज पर हैं?
xwoker

1
क्या यह उत्तर आपको चाहिए? stackoverflow.com/a/4724062/1570834
DB5

हां उपयोगी है, लेकिन मैं परियोजना के लिए chnges नहीं कर सकता, फिर भी सामान समान है और उत्तर सही है
PAT

जवाबों:


138

मावेन JAVA_HOMEयह जानने के लिए पैरामीटर का उपयोग करता है कि यह किस जावा संस्करण को चलाने वाला है। मैं आपकी टिप्पणी से देखता हूं कि आप इसे कॉन्फ़िगरेशन में नहीं बदल सकते।

  • आप JAVA_HOMEमावेन शुरू करने से पहले (और बाद में जरूरत पड़ने पर इसे बदल सकते हैं) पैरामीटर सेट कर सकते हैं ।
  • आप अपने mvn(गैर-विंडोज़) / mvn.bat/ mvn.cmd(विंडोज़) में भी जा सकते हैं और अपना जावा संस्करण स्पष्ट रूप से वहां सेट कर सकते हैं।

29
@andPat: तो? आप JAVA_HOMEअपने मशीन के कॉन्फ़िगरेशन को बदलने के बिना अपने स्थानीय शेल में सेट कर सकते हैं (जैसे ही आप उस शेल को बंद करते हैं, परिवर्तन समाप्त हो जाता है)। आप इसे एकल कमांड के लिए भी बदल सकते हैं:JAVA_HOME=/path/to/jdk17/ mvn build
जोआचिम सॉर

@JoachimSauer: हाँ, लेकिन मैंने mvn.bat का संदर्भ भी दिया है, जो कि विंडोज़ विशिष्ट है।
डैनियलबारबेरियन

मैक पर आप JAVA_HOME के ​​साथ .mavenrc फ़ाइल बना सकते हैं
Ronan Quillevere

पुराना है, लेकिन मेरी 2 सेंट में फेंक रहा है। मैं एक जावा 8 सेवा पर काम कर रहा हूं जिसे जावा 7 एप्लिकेशन कहा जाता है। निर्माण करते समय लगातार स्विच करने से बचने के लिए, मैंने (विंडोज़ पर) एक MVN_JAVA_HOME पर्यावरण चर बनाया, और फिर MAV और mvn.cmd के अंदर MVN_JAVA_HOME के ​​साथ JAVA_HOME की प्रत्येक घटना को प्रतिस्थापित करें।
रयानलुटजेन

74

पोम में, आप संकलक गुण सेट कर सकते हैं, उदाहरण के लिए 1.8:

<project>
...
 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
...
</project>

9
संकलक-प्लगइन संस्करण 3.7.0 के रूप में, स्रोत और लक्ष्य के लिए डिफ़ॉल्ट मान यदि अनिर्दिष्ट है तो 1.5 है
मुकुट

58

स्थापित कई जावा संस्करण वाले लोगों के लिए एक समाधान जोड़ना

हमारे पास एक बड़ा कोडबेस है, जिसमें से अधिकांश जावा में है। मैं जिस पर काम करता हूं उसका अधिकांश भाग जावा 1.7 या 1.8 में लिखा गया है। चूंकि JAVA_HOMEमैं स्थिर हूं, मैंने .bashrcअलग-अलग मूल्यों के साथ मावेन को चलाने के लिए अपने में उपनाम बनाया :

alias mvn5="JAVA_HOME=/usr/local/java5 && mvn"
alias mvn6="JAVA_HOME=/usr/local/java6 && mvn"
alias mvn7="JAVA_HOME=/usr/local/java7 && mvn"
alias mvn8="JAVA_HOME=/usr/local/java8 && mvn"

यह प्रोजेक्ट पर उपयोग किए गए JDK संस्करण की परवाह किए बिना मुझे अपने विकास मशीन पर कमांड लाइन से मावेन चलाने देता है।


2
जब तक आपको विभिन्न परियोजनाओं के लिए 2 और 3 की जरूरत नहीं पड़ती है, उस स्थिति में जब आप पहले से ही परिभाषित mvn2और mvn3परिभाषित होते हैं और नामकरण थोड़ा सा कायरतापूर्ण हो जाता है जब जावा संस्करण भी
चलन

3
यदि आप एक मैक का उपयोग कर रहे हैं, तो आपका JDK java_home कमांड के साथ आता है ताकि आप हार्डकोडिंग रास्तों से बच सकें, जैसेalias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
ptkvsk

5
(Ubuntu + bash) पर, आपको &&पहले छोड़ना होगा mvn। mvan को JAVA_HOME का मान दिखाई नहीं देता है &&
फेबियन

@ फैबिन को जानकर अच्छा लगा; मैं ZSH का उपयोग करता हूं और बैश मतभेदों के बारे में नहीं जानता
जोनाथन लैंड्रम

47

खिड़कियों पर

यदि आप JAVA_HOMEसिस्टम चर के अंदर अपने चर को बदलना नहीं चाहते हैं ।

अपनी mvn.batफ़ाइल को संपादित करें और इस तरह एक पंक्ति जोड़ें

set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre

यह @REM ==== START VALIDATION ====@ जोनाथन द्वारा उल्लिखित की तरह किया जा सकता है

Mac (& Linux?) पर

यदि आप अपने JAVA_HOMEवैरिएबल को अपने अंदर बदलना नहीं चाहते ~/.bashrcया~/.bash_profile

आप java_home टूल का उपयोग करके एक ~/.mavenrcफ़ाइल बना सकते हैं और उसे फिर से परिभाषित कर सकते हैंJAVA_HOME

export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_45`

मानसिक स्वास्थ्य की जांच

आप यह सत्यापित कर सकते हैं कि निम्न आदेशों को निष्पादित करके सब कुछ ठीक चल रहा है। Jdk संस्करण अलग होना चाहिए।

mvn -version

फिर

java -version


मैंने इसे JAVA_HOME = C: \ Program Files \ Java \ jdk1.7.0_45 को बाहर करने के लिए jre सबफ़ोल्डर सेट करने के लिए सेट किया।
नैनोसॉफ्ट

32

मेरे दो सेंट जोड़ना और स्पष्ट रूप से समाधान प्रदान करना।

मेरे पास मेरे विंडोज मशीन पर दो JDK स्थापित हैं - JDK 1.5और JDK 1.6

मेरा डिफ़ॉल्ट (और विंडोज़ सिस्टम पर्यावरण चर JAVA_HOMEपर सेट ) सेट है JDK 1.5

हालाँकि, मेरे पास एक मावेन प्रोजेक्ट है जिसे बनाने के लिए मुझे (यानी, जेबेव ट्यूटोरियल के ईटीएस डॉट कॉम ) का उपयोग करना होगा JDK 1.6

इस परिदृश्य में मेरा समाधान (जो काम किया!), जैसा कि @DanielBarbarianइसमें सेट करने के लिए सुझाया गया है mvn.bat

खिड़की के बैच फ़ाइल से परिचित नहीं कुछ के लिए, मैंने मूल रूप से (यानी, ) के set JAVA_HOME=<path_to_other_jdk>बाद लाइन जोड़ी :@REM ==== START VALIDATION ====mvn.bat%MAVEN_HOME%\bin\mvn.bat

@REM ==== START VALIDATION ====
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45\jre
if not "%JAVA_HOME%" == "" goto OkJHome

4
मावेन 3.5 में, mvn.batइसका नाम बदल दिया गया है mvn.cmd
सीकेएम

30

मैंने अभी हाल ही में, मावेन के साथ सात लंबे वर्षों के बाद, टूलचिन्स.एक्सएमएल के बारे में सीखा। मावेन ने इसे दस्तावेज भी किया है और 2.0.9 से इसका समर्थन करता है - टूलचिन प्रलेखन

तो मैंने निम्नलिखित सामग्री के साथ अपने ~ / .m2 / फ़ोल्डर में एक टूलचैन.एक्सएमएल फ़ाइल जोड़ी:

<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
 <!-- JDK toolchains -->
 <toolchain>
   <type>jdk</type>
   <provides>
     <version>1.8</version>
     <vendor>sun</vendor>
   </provides>
   <configuration>
     <jdkHome>/opt/java8</jdkHome>
   </configuration>
 </toolchain>
 <toolchain>
   <type>jdk</type>
   <provides>
     <version>1.7</version>
     <vendor>sun</vendor>
   </provides>
   <configuration>
     <jdkHome>/opt/java7</jdkHome>
   </configuration>
 </toolchain>
</toolchains>

यह आपको यह परिभाषित करने की अनुमति देता है कि जेडीके मावेन के बावजूद परियोजना के निर्माण के लिए जेडीके मावेन का क्या उपयोग हो सकता है। जब आप IDE में प्रोजेक्ट स्तर पर JDK को परिभाषित करते हैं, तो उसे क्रमबद्ध करें।


2
सबसे अच्छा जवाब,! धन्यवाद। यह एक स्पष्ट स्थिति की व्याख्या करता है जहां हम मावेन और परियोजना को दो अलग-अलग जावा रनटाइम / फ्रेमवर्क के संकलन के तहत चलाना चाहते हैं।
साउंडराजन

5

समस्या का एक सरल समाधान -

JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn clean install

मैक पर, यह कुछ इस तरह दिखेगा -

JAVA_HOME = / लाइब्रेरी / जावा / JavaVirtualMachines / jdk1.7.0_21.jdk / सामग्री / होम / भवन क्लीन इंस्टॉल

पुनश्च: एक विशेष मामला जो मुझे मिला वह यह है कि ऊपर दी गई कमांड 'फिश' शेल पर काम नहीं करती है। मुझे बैश शेल भी उपलब्ध था और इसने वहां अच्छा काम किया। बस कमांड 'बैश' का उपयोग बैश शेल में जाने के लिए करें।


5

आप कॉन्फ़िगर कर सकता है अलग JDK का उपयोग कर सूत्रों संकलन के साथ maven-compiler-plugin

बस टैग javacमें पथ निर्दिष्ट करें <executable>। Java11 के लिए यह ऐसा दिखता है:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <source>11</source>
        <target>11</target>
        <fork>true</fork>
        <executable>C:\Program Files\Java\jdk-11.0.1\bin\javac</executable> <!--PATH TO JAVAC -->
    </configuration>
</plugin>

4

अपनी परियोजना और अपने पर्यावरण चर के किसी भी प्रभाव से बचने के लिए, आप स्रोत और लक्ष्य जावा संस्करण को निर्दिष्ट करते हुए, केवल प्रोजेक्ट के पीओएम में मावेन कंपाइलर प्लगिन को कॉन्फ़िगर कर सकते हैं।

  <plugins>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>
    ...
  </plugins>

4

आप नीचे दिए गए निर्देशों का पालन करके किसी भी जावा संस्करण का उपयोग करने के लिए मावेन को सेट कर सकते हैं।

अपने मशीन लिंक में जेनव स्थापित करें

कमांड लाइन में निम्नलिखित कमांड जारी करके अपनी मशीन में उपलब्ध जावा संस्करणों की जाँच करें।

जेनव संस्करण

आप निम्न आदेश का उपयोग करके वैश्विक जावा संस्करण निर्दिष्ट कर सकते हैं।

jenv वैश्विक oracle64-1-1.0.0.39

आप कमांड लाइन में निर्देशिका में निम्नलिखित कमांड का उपयोग करके किसी भी निर्देशिका (परियोजना) के लिए स्थानीय जावा संस्करण निर्दिष्ट कर सकते हैं।

jenv स्थानीय oracle64-1.7.0.11

अपने pom.xml में सही जावा संस्करण जोड़ें

यदि आप कमांड लाइन में maven चला रहे हैं, तो नीचे कमांड का उपयोग करके jenv maven प्लगइन इंस्टॉल करें

jenv enable-plugin maven

अब आप अपनी मशीन में किसी भी परेशानी के साथ किसी भी जावा संस्करण को किसी भी परियोजना के लिए कॉन्फ़िगर कर सकते हैं।


1
इस विकल्प की तरह। jenv, python के लिए virtualenv की तरह है
जेसी ज़ुआंग

4

मैक पर, (यह मानते हुए कि आपके पास सही संस्करण स्थापित है)

JAVA_HOME=`/usr/libexec/java_home -v 1.8` mvn clean install -DskipTests


4

पर्यावरण चर को बदले बिना, आप मावेन कंपाइलर प्लगिन का उपयोग करके परियोजना स्तर के आधार पर जावा संस्करण का प्रबंधन कर सकते हैं।

विधि 1

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

विधि 2

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

2

खिड़कियों पर, मैं सिर्फ इस तरह मावेन बिन फ़ोल्डर के लिए अलग JDK संस्करणों के लिए कई बैच फ़ाइलों को जोड़:

mvn11.cmd

@echo off
setlocal
set "JAVA_HOME=path\to\jdk11"
set "path=%JAVA_HOME%;%path%"
mvn %*

फिर आप mvn11निर्दिष्ट JDK में मावेन को चलाने के लिए उपयोग कर सकते हैं ।



1

मुझे JAVA_HOMEकंसोल पर सिर्फ सेटिंग के साथ मैक पर सफलता नहीं मिली लेकिन मैं इस दृष्टिकोण के साथ सफल रहा

  • अपने घर निर्देशिका में अपने .mavenrc फ़ाइल बनाएँ (ताकि फ़ाइल पथ हो जाएगा ~/.mavenrc
  • उस फ़ाइल में पेस्ट करें export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

0

इसके अलावा, आपके पास मावेन के दो संस्करण हो सकते हैं , और उनमें से एक को संपादित करना, यहाँ संपादित करना:

mvn (गैर विंडोज़) /mvn.bat/mvn.cmd (विंडोज़)

आपके जावा वांछित पथ के लिए अपने% java_home% दिखावे की जगह। फिर बस उस संशोधित पथ से मावेन को निष्पादित करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.