ant - '' Java.exe '' को आंतरिक या बाहरी कमांड के रूप में पहचाना नहीं गया है,




(6)

मैंने जावा jdk1.7.0_06 और जावा जेआर 7 दोनों को डाउनलोड किया है। और मैंने निम्न विंडोज़ 7 में JAVA_HOME C:\Program Files\Java\jdk1.7.0_06\bin कमांड लाइन में निम्नलिखित JAVA_HOME C:\Program Files\Java\jdk1.7.0_06\bin चर JAVA_HOME C:\Program Files\Java\jdk1.7.0_06\bin को JAVA_HOME C:\Program Files\Java\jdk1.7.0_06\bin । लेकिन जब मैं अपने विंडोज 7 पर सीएमडी कमांड लाइन में निम्न टाइप करता हूँ C:\activiti-5.10\activiti-5.10\setup>ant demo.start डेमो। डेमो आवेदन चलाने के लिए C:\activiti-5.10\activiti-5.10\setup>ant demo.start करें मुझे कमांड लाइन में निम्न त्रुटि मिली:

"java.exe" 'को आंतरिक या बाहरी कमांड, ऑपरेटिव प्रोग्राम या बैच फ़ाइल के रूप में मान्यता नहीं दी गई है

तो क्या किसी को पता है कि मैं इस समस्या को कैसे हल सकता हूं? बीआर


Answers

बस अपने% windir / System32 फ़ोल्डर से फ़ाइलों का निम्न सेट हटाना। वास्तव में java.exe को हटाना पर्याप्त है, लेकिन स्थिरता के लिए सिर्फ सभी जावा संबंधित बायनेरिज़ को हटा दें।

  1. java.exe
  2. javaw.exe
  3. javaws.exe

वास्तव में ओएकल विंडोज़ इंस्टॉलर इन फ़ाइलों की एक प्रति% windir / System32 फ़ोल्डर में डालता है (जिसे मैं क्यों नहीं समझता), लेकिन ऐसा लगता है कि उन्हें जरूरी नहीं है (जैसा कि वे जेडीके फ़ोल्डर के तहत उपलब्ध हैं, जहां आप उन्हें स्थापित करते हैं)।

मैंने एसओ और अन्य मंचों में तैनात सभी विभिन्न समाधानों की कोशिश की है, लेकिन उनमें से कोई भी मेरे लिए काम नहीं करता है मैंने भी सभी संबंधित परिवेश चर (JAVA_PATH, CLASS_PATH आदि) को भी सही तरीके से सेट किया है। अंत में यह एकमात्र उपाय है जो मेरे लिए काम किया है


आपको अपने पाथ चर में फ़ाइल java.exe डालनी होगी लेकिन JAVA_HOME में JRE


JAVA_HOME JDK रूट फ़ोल्डर का रास्ता है। An: C: \ Program Files \ Java \ jdk1.7.0_06 लेकिन पथ परिभाषित करता है C: \ Program Files \ Java \ jdk1.7.0_06 \ bin

JAVA_HOME C:\Program Files\Java\jdk1.7.0_06
JRE_HOME C:\Program Files\Java\jre1.7.0_06
path = C:\Program Files\Java\jdk1.7.0_06\bin;C:\Program Files\Java\jre1.7.0_06\bin

सामान्यतया जावा एहोमई "बिन" फ़ोल्डर की मूल निर्देशिका होना चाहिए। (जेआर या जेडीके)

इस मामले में ant उम्मीद है कि जावा जेडीके से होगा।

एक सीएमडी विंडो में निम्नलिखित का प्रयास करें

set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_06
set path="%JAVA_HOME%/bin;%path%;
ant

(पक्ष नोट: पथ को java.exe जोड़ना, चींटी के लिए एक आवश्यकता नहीं है, यह उपयोगकर्ता के लिए एक सुविधाजनक बात है)


यदि आप "ant.bat" फ़ाइल को देखते हैं, तो आप देखेंगे कि यह "java" कमांड को निम्न तरीके से दिखता है:

  1. यदि %JAVACMD% पर्यावरण चर सेट है, तो यह उस का उपयोग करता है
  2. अन्यथा, यदि %JAVA_HOME% परिवेश चर सेट है, तो यह %JAVA_HOME%\bin\java.exe का उपयोग करने की कोशिश करता है
  3. अन्यथा, यह java.exe का उपयोग करने की कोशिश करता है; यानी यह आपके% PATH% पर दिखेगा।

आपके मामले में, आपके पास %JAVA_HOME% सेट है ... लेकिन जावा स्थापना की "बिन" निर्देशिका पर सेट है, स्थापना की जड़ से नहीं। इसलिए Ant.bat स्क्रिप्ट Ant.bat लिए गलत जगह पर java.exe

बस %JAVA_HOME% ठीक से सेट करें, और यह काम करना चाहिए।

JAVA_HOME C:\Program Files\Java\jdk1.7.0_06

चींटी कार्य करने के लिए आपको अपने %PATH% पर जावा "बिन" निर्देशिका की आवश्यकता नहीं है , लेकिन यह किसी भी तरह से सेट करने का एक अच्छा विचार है। इस तरह आप कमांड लाइन से बस जावा कमांड चला सकते हैं।

%CLASSPATH% की सेटिंग इस समस्या से संबंधित नहीं है दरअसल, जब तक कि build.xml फ़ाइल टूट न जाए, चींटी आपके %CLASSPATH% परिवेश चर को अनदेखा करेगी।


मेरे पास लगभग एक ही प्रश्न और आंशिक उत्तर है। यह सुनिश्चित नहीं है कि रचनात्मक / deconstructive जवाब भाषा डिजाइनरों के दिमाग में क्या था। मुझे लगता है कि एन तक 3 और अधिक के पास वैध उपयोग के मामले हैं।

मैं .NET से आया हूँ। और .NET में आपके पास शून्य कार्यों के लिए Func और Action है। भविष्यवाणी और कुछ अन्य विशेष मामले भी मौजूद हैं। देखें: https://msdn.microsoft.com/en-us/library/bb534960(v=vs.110).aspx

मुझे आश्चर्य है कि कारण क्यों था कि भाषा डिजाइनरों ने फंक्शन, बिफंक्शन का चयन किया और DecaExiFunction तक जारी नहीं रखा?

दूसरे भाग का जवाब टाइप एरर है। संकलन के बाद Func और Func के बीच कोई अंतर नहीं है। इसलिए निम्नलिखित संकलित नहीं है:

package eu.hanskruse.trackhacks.joepie;

public class Functions{

    @FunctionalInterface
    public interface Func<T1,T2,T3,R>{
        public R apply(T1 t1,T2 t2,T3 t3);
    }

    @FunctionalInterface
    public interface Func<T1,T2,T3,T4,R>{
        public R apply(T1 t1,T2 t2,T3 t3, T4 t4);
    }
}

एक और मामूली समस्या को रोकने के लिए आंतरिक कार्यों का उपयोग किया जाता था। ग्रहण ने एक ही निर्देशिका में फ़ंक्शन नामक फ़ाइलों में दोनों कक्षाएं रखने पर जोर दिया ... सुनिश्चित नहीं है कि यह आजकल एक कंपाइलर समस्या है या नहीं। लेकिन मैं ग्रहण में त्रुटि को चालू नहीं कर सकता।

जावा फंक्शन प्रकार के साथ नाम संघर्ष को रोकने के लिए Func का उपयोग किया गया था।

तो यदि आप 3 से 16 तर्क से Func जोड़ना चाहते हैं तो आप दो चीजें कर सकते हैं।

  • TriFunc, TesseraFunc, PendeFunc, ... DecaExiFunc आदि बनाओ
    • (क्या मुझे यूनानी या लैटिन का उपयोग करना चाहिए?)
  • नाम अलग करने के लिए पैकेज नाम या कक्षाओं का उपयोग करें।

दूसरे तरीके के लिए उदाहरण:

 package eu.hanskruse.trackhacks.joepie.functions.tri;

        @FunctionalInterface
        public interface Func<T1,T2,T3,R>{
            public R apply(T1 t1,T2 t2,T3 t3);
        }

तथा

package eu.trackhacks.joepie.functions.tessera;

    @FunctionalInterface
    public interface Func<T1,T2,T3,T4,R>{
        public R apply(T1 t1,T2 t2,T3 t3, T4 t4);
    }

सबसे अच्छा तरीका क्या होगा?

उपर्युक्त उदाहरणों में मैंने एंडहेन () और रचना () विधियों के लिए कार्यान्वयन शामिल नहीं किए थे। यदि आप इन्हें जोड़ते हैं तो आपको प्रत्येक 16 ओवरलोड जोड़ना होगा: TriFunc में 16 तर्कों के साथ एक एंडथ () होना चाहिए। सर्कुलर निर्भरताओं के कारण यह आपको संकलन त्रुटि देगा। इसके अलावा आपके पास फंक्शन और बायफंक्शन के लिए इन अधिभार नहीं होंगे। इसलिए आपको एक तर्क और Func के साथ Func को दो तर्कों के साथ परिभाषित करना चाहिए। .NET परिपत्र निर्भरताओं में विस्तार विधियों का उपयोग करके अवरुद्ध किया जाएगा जो जावा में मौजूद नहीं हैं।





java ant