2013-03-07 6 views
28

जब मैं mvn -version चलाता था, मैंने java_home अंक ...jdk\jre (जैसा कि नीचे दिखाया गया है) देखा। क्या यह गलत है? क्या यह ...\jdk.x.y.z पर इंगित नहीं करना चाहिए (\jre के बिना)? यदि हां, तो मैं इसे कैसे रीसेट कर सकता हूं?मैवेन में जावा_होम

C:\Users\Owner>mvn -version 
Apache Maven 2.2.1 (r801777; 2009-08-06 15:16:01-0400) 
Java version: 1.7.0_17 
Java home: C:\Program Files\Java\jdk1.7.0_17\jre 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 7" version: "6.1" arch: "amd64" Family: "windows" 

उत्तर

50

नहीं (jdk निर्देशिका के लिए वैश्विक %java_home% अंक में), यह गलत नहीं है। यह आपके जेडीके द्वारा उपयोग किए जाने वाले जेआरई को इंगित कर रहा है, जो कि यह माना जाता है। आप JAVA_HOME बाहर Maven प्रिंट आउट करते हैं, तो इसे सही ढंग से मुद्रित करना चाहिए:

C:\>echo %JAVA_HOME% 
C:\Program Files\Java\jdk1.7.0_07 

C:\>mvn -version 
Apache Maven 3.0.4 (r1232337; 2012-01-17 10:44:56+0200) 
Maven home: C:\APPS\apache-maven-3.0.4\bin\.. 
Java version: 1.7.0_07, vendor: Oracle Corporation 
Java home: C:\Program Files\Java\jdk1.7.0_07\jre 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows" 
C:\> 

तो मूल रूप से JAVA_HOME एक JDK स्थापना को इंगित (Maven tools.jar की जरूरत है), लेकिन वास्तव में maven करने की जरूरत है JDK भीतर JRE का उपयोग करता है खुद को चलाने के लिए ।

जब mvn -version का उपयोग कर, Maven, जावा आंतरिक java.home संपत्ति का उपयोग करता है के रूप में source code से देखा जा सकता:

version.append("Java home: " + System.getProperty("java.home", "<unknown java home>")).append(LS); 

यह गुण JAVA_HOME वातावरण सेटिंग के रूप में एक ही बात नहीं है, तो यह आप मूर्ख हो सकता है। यह वास्तव में गतिशील संपत्ति है जो आपको दिखा रहा है कि जेआरई आपका कोड चला रहा है। यदि आप एक टेस्ट.जावा टेस्ट क्लास को संकलित और निष्पादित करते हैं, तो आप देख सकते हैं कि यदि आपका JAVA_HOME एक जेडीके को इंगित करता है, तो java.home का मान आपके JAVA_HOME के ​​बराबर नहीं है। यह उम्मीद है।

का हवाला देते हुए this:

क्या JAVA_HOME और java.home के बीच का अंतर है?

JAVA_HOME जेडीके इंस्टॉल निर्देशिका है, उदाहरण के लिए, सी: \ jdk5। यह होना चाहिए जो पर्यावरण चर के रूप में सेट है और विंडोज बैच फ़ाइलों या यूनिक्स स्क्रिप्ट में संदर्भित है। मेरे पास हमेशा मेरे विंडोज नियंत्रण कक्ष और .tcsh फ़ाइलों में अन्य सामान्य पर्यावरण चर के साथ है। कुछ जावा एप्लिकेशन इस उद्देश्य के लिए jdk.home नाम का उपयोग करते हैं, जो मुझे लगता है कि एक बेहतर नाम है। लेकिन शुरुआत से JAVA_HOME का उपयोग किया गया है और अब एक सम्मेलन है।

java.home जेआरई स्थापित निर्देशिका है, उदाहरण के लिए, सी: \ jdk5 \ jre, या सी: \ प्रोग्राम फ़ाइलें \ जावा \ jre1.5.0_06। JAVA_HOME के ​​विपरीत, मैंने कभी भी java.home को पर्यावरण चर के रूप में नहीं देखा। java.home एक अंतर्निहित जावा सिस्टम प्रॉपर्टी है, जिसका मान जेआरई इंस्टॉल निर्देशिका है। चूंकि सभी जावा सिस्टम गुणों को भी एंटी बिल्ड गुणों के रूप में उजागर किया जाता है, इसलिए आप बिल्ड फ़ाइलों में $ {java.home} का भी उपयोग कर सकते हैं।

क्या होगा। बेहतर नाम हो सकता है? शायद, लेकिन मुझे नहीं लगता कि सूर्य इसे बदल देगा।

आपको लगता है कि Maven देख सकते हैं mvn.bat पर JAVA_HOME उपयोग करता है:

:endInit 
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" 
.. 
%MAVEN_JAVA_EXE% %MAVEN_OPTS% -classpath %CLASSWORLDS_JAR% .. 

और आप यह सुनिश्चित करना चाहते हैं, तो आप mvn.bat में बयान टिप्पणी "बंद @echo" कर सकते हैं, तो आप देख सकते हैं कि इसका इस्तेमाल किया जा रहा है।


टीएल; डीआर: आपके द्वारा दी गई जानकारी के आधार पर, आपकी कॉन्फ़िगरेशन सही है, कुछ भी बदलने की आवश्यकता नहीं है।


संपादित करें: अब भी an issue open about this being confusing है। शायद वे इसे भविष्य में बदल देंगे।

+0

धन्यवाद! 'टीएल; डीआर' के लिए +1;)) –

+0

कोई जांच नहीं। हो सकता है कि अगर आपको लगता है कि इस सवाल का जवाब है तो कृपया स्वीकार करें :) – eis

+0

@ हाय हाय, मुझे एक समस्या है http://stackoverflow.com/questions/26313902/maven-error-perhaps-you-are-running-on-a- यहां पर जेड-टू-ए-ए-जेडीके, क्या आप कृपया इसे समझने में मेरी मदद कर सकते हैं। धन्यवाद। – Kraken