2012-02-14 27 views
10

मैं ग्रहण classpath फ़ाइल को समझने के लिए, विशेष रूप से, मैं इस जानना चाहता हूँ कोशिश कर रहा हूँ समझना:ग्रहण classpath घोषणाओं

  1. कैसे इसे का उपयोग JRE है (यानी JVM इस xml फ़ाइल पढ़ रहा है सीधे, या किसी भी तरह से अपने आंतरिक कंपाइलर में इसे ग्रहण कर ग्रहण कर रहा है)?

  2. जटिल आईडी (नीचे आईवी पथ की तरह) कैसे पार्स किए गए हैं और जब मैं अपने आईडीई से अपनी कक्षाएं चलाता हूं तो जेवीएम क्लासलोडर में शामिल किया जाता है?

प्रसंग: मैं एक अजीब बग है कि ग्रहण, एक वर्ग के "गलत" संस्करण का उपयोग कर रहा है मेरी आइवी लता/चींटी निर्माण सही संस्करण उपयोग कर रहा है, जबकि है, और मुझे इस प्रकार बेहतर करने के लिए उपकरण ग्रहण करना चाहते हैं मेरे शुद्ध निर्माण में इस्तेमाल किए गए क्लासलोडर की नकल करें। ऐसा करने के लिए, मुझे लगता है कि मुझे ग्रहण परियोजना/क्लासपाथ फ़ाइलों को देखना होगा।

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" path="src"/> 
    <classpathentry kind="src" path="test"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
    <classpathentry kind="lib" path="conf"/> 
    <classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?ivyXmlPath=ivy.xml&amp;confs=*"/> 
    <classpathentry kind="output" path="build"/> 
</classpath> 
+0

मुझे विश्वास नहीं है कि JVM ग्रहण क्लासपाथ फ़ाइल के बारे में कुछ भी जानता है। आप मुख्य ब्लॉक के साथ एक टेस्ट क्लास को खटखटा सकते हैं जो सिर्फ System.getProperty ("java.class.path") को प्रिंट करता है - जो आपको दिखाएगा कि आपके सभी जटिल संदर्भ डिस्क पर जार फ़ाइल स्थानों के लिए हल किए गए हैं, जो हैं फिर एक सामान्य जेआरई कक्षा में खिलाया। यदि आपके पास आइवी सामान के साथ एक अस्पष्ट बग है तो आप इसे आइवी ग्रहण प्लगइन के डेवलपर्स के साथ उठा सकते हैं? शुभकामनाएं आपके मुद्दे को हल करना – davidfrancis

उत्तर

10

दो अलग अलग बातें:

1) परियोजना classpath अपने कोड ग्रहण जावा संकलक (EJC) का उपयोग कर संकलित करने के लिए प्रयोग किया जाता है, तो फ़ाइल जानकारी EJC को पारित कर दिया है।

2) जब आप लॉन्च कॉन्फ़िगरेशन बनाते हैं, तो आप वास्तव में क्लासपाथ को अपने एप्लिकेशन को चलाने के लिए घोषित कर रहे हैं, जो डिफ़ॉल्ट रूप से आपके प्रोजेक्ट क्लासपाथ पर आधारित होता है। यह क्लासपाथ JVM के लिए एक तर्क के रूप में पारित किया गया है जैसे आप इसे मैन्युअल रूप से करेंगे (जावा-सीपी $ {classpathentries} yourmainclass)। यदि आप यह जानना चाहते हैं कि आपके लॉन्च कॉन्फ़िगरेशन का क्लासपाथ सटीक रूप से क्या है, तो अपने ऐप/कक्षाएं डीबग मोड में लॉन्च करें, और डीबग व्यू में, अपनी प्रक्रिया का चयन करें और उन गुणों पर क्लिक करें जहां आप पूर्ण क्लासपाथ देखेंगे (सभी जार/निर्देशिका जो JVM को तर्क के रूप में पास की जाती हैं)

एनबी: मैं आपकी आईवी पथ सामग्री नहीं देख सकता।

+0

"डीबग, गुण" को इंगित करने के लिए धन्यवाद, यही वह है जिसे मैं ढूंढ रहा हूं। –

+0

क्या लॉन्च कॉन्फ़िगरेशन में क्लासपाथ मैन्युअल रूप से बदलने का कोई तरीका है? हमारी कुछ निर्भरता मेवेन परियोजनाओं में स्रोत/परीक्षण/संसाधन स्रोत फ़ोल्डर के अंतर्गत संसाधन संसाधन हैं। ग्रहण रन कमांड में लक्ष्य/टेस्ट-क्लास फ़ोल्डर को अंतिम कक्षा में शामिल किया जाएगा, जो हम नहीं चाहते थे। – Chris

0

समस्या हो सकती है:

यह अपने ग्रहण classpath में इसका मतलब है, आप (अलग संस्करण के दो विभिन्न जार फ़ाइलें) एक ही वर्ग के दो अलग संस्करण होने दिया जाना चाहिए। यदि ऐसा है, तो एक को हटाने का प्रयास करें। इसके अलावा आपके ग्रहण पथ में "बिल्ड ऑर्डर" नामक कुछ चीज है जहां आप क्लासपाथ जार के ऑर्डर को निर्दिष्ट करने का प्रयास कर सकते हैं।