2013-07-10 4 views
10

मेरी build.xml फ़ाइल में, मैं इन पंक्तियों के होते हैं:

<property environment="env"/> 
<echo message="JAVA_HOME is set to = ${env.JAVA_HOME}" /> 

कुछ मशीन पर, यह मुद्रित होगा

"JAVA_HOME is set to = /usr/jdk1.6" 

लेकिन कुछ अन्य लोगों पर , यह

"JAVA_HOME is set to = ${env.JAVA_HOME}" 

क्या किसी को यह पता चलेगा कि इसका कारण क्या हो सकता है?

धन्यवाद

उत्तर

9

संदेश आपको बताता है कि चींटी संपत्ति env.JAVA_HOME हल करने में सक्षम नहीं था, इसका मतलब है कि पर्यावरण परिवर्तनीय JAVA_HOME उस मशीन में सेट नहीं किया गया था।

+0

JAVA_HOME सेट नहीं है, तो यह कैसे के लिए संभव था परियोजना का निर्माण करने की? (यह एक जावा प्रोजेक्ट है) –

+0

चींटी को आपको 'JAVA_HOME' सेट करने की आवश्यकता नहीं है (जैसा कि आपने पाया होगा क्योंकि आप अपनी बिल्ड फ़ाइल को मशीनों पर भी निष्पादित करने में सक्षम थे, जहां 'JAVA_HOME' सेट नहीं किया गया था) –

+0

ठीक है अब यह समझ में आता है । धन्यवाद –

6

आप आमतौर पर अपने सिस्टम (यदि आप यूनिक्स हैं) पर पा सकते हैं जहां वास्तविक ant कमांड which ant या type ant कर कर रहता है। यदि आप उस स्थान को देखते हैं, तो आप आमतौर पर देखेंगे कि यह $ANT_HOME निर्देशिका के तहत वास्तविक ant कमांड का एक लिंक है।

इस स्क्रिप्ट पर एक नज़र डालें। इसमें से अधिकांश बस यह निर्धारित करने की कोशिश कर रहे हैं कि $ANT_HOME और $JAVA_HOME निवास में डिफ़ॉल्ट रूप से सेट नहीं हैं या नहीं।

आप ant खोल स्क्रिप्ट में नहीं दिख रहा है क्या है:

EXPORT JAVA_HOME 

तो, भले ही $JAVA_HOMEant स्क्रिप्ट के अंदर सेट कर दिया जाता है, यह वातावरण में निर्यात किया कभी नहीं किया गया है (किसी ant में संशोधन किया है, जब तक कि खोल स्क्रिप्ट . If an environment variable is not exported, it is unavailable to child processes -- like the जावा child process running your ant` प्रक्रिया।

इस प्रकार, यदि आप एक मशीन जहां $JAVA_HOMEant से पहले सेट नहीं है निष्पादित किया जाता है पर हैं, यह अपने निर्माण लिपि में उपलब्ध नहीं होगा।

हालांकि, एंटी और जावा दोनों (क्योंकि चींटी जावा प्रक्रिया है) एक पूरी तरह से डिफ़ॉल्ट गुणों का उपयोग करते हैं जिन्हें आप उपयोग कर सकते हैं। जब चींटी निष्पादित करता है तो यह own built in properties सेट करता है जिसमें ${ant.home} जैसी चीजें शामिल होती हैं। और, जब जावा निष्पादित किया जाता है, तो जावा Java Properties की एक पूरी सूची भी सेट करता है जैसे ${java.home}

तो, यदि आपको वास्तव में यह जानना है कि आपकी JAVA_HOME निर्देशिका कहां स्थित है, तो संपत्ति ${java.home} का उपयोग करें और पर्यावरण चर $JAVA_HOME पर निर्भर नहीं है।

आप इन गुणों की एक सूची प्राप्त करना चाहते हैं, तो निम्न चींटी निर्माण फ़ाइल को चलाने:

<project> 
    <echoproperties/> 
</project> 
+0

इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए .. क्योंकि इसमें ओपी की तलाश में एक जवाब है ... – Victor

+2

अच्छा, यह सिर्फ गलत है। '$ {java.home} 'निश्चित रूप से यह नहीं बता रहा है कि JAVA_HOME कहां है, केवल पर्यावरण चर ही बताएगा। '$ {जावा।घर} 'बताएगा कि निष्पादन में जेआरई का उपयोग किया जाता है, जो एक अलग बात है। – eis