2016-12-21 3 views
9

मेरे पास एक प्रोजेक्ट की क्लासपाथ फ़ाइल है जिसमें सभी क्लासपाथ प्रविष्टियां हैं। अब यह entry-एक्लिप्स क्लासपैंट्री से सभी जेएआर कैसे पढ़ा जाए, जहां दयालु = "con"

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"> 
</classpathentry> 

निम्नलिखित है अब, यह प्रविष्टि, मैं चाहता हूँ से सभी जार जो जावा कोड प्रोग्राम के माध्यम से इस पुस्तकालय के साथ जुड़े रहे खोजने के लिए? क्या सभी जार पढ़ने का कोई तरीका है?

+0

क्या यह एक आवश्यकता है कि यह प्रोग्राम एक्लिप्स में चल रहे प्लगइन के बाहर स्टैंड-अलोन चला सकता है? मुझे एक्लिप्स प्लगइन के साथ थोड़ा सा अनुभव है और मैं ग्रहण के क्लासपाथ रीडर के स्रोत पर रहा हूं। – ProgrammersBlock

+0

हाँ .. यह स्टैंडअलोन भी चला सकता है – Disha

+0

बस चेक इन करें। मेरे उत्तर पर कोई प्रतिक्रिया नहीं होने के कारण, मुझे नहीं पता कि आपको गहरी खुदाई करने या अधिक स्पष्ट होने के लिए मुझे क्या चाहिए। – ProgrammersBlock

उत्तर

2

"con" is a container like JRE और यह आपके एप्लिकेशन में पैरेंट क्लासलोडर से संबंधित है। यह conatiner अपने स्वयं के classpath परिभाषित किया गया है और यह क्रम में पढ़ा जा सकता है:

public static void main(String[] args) { 
    ClassLoader classLoader = ClassLoader.getSystemClassLoader(); 
    ClassLoader parentClassLoader = classLoader.getParent(); 
    System.out.println("Project jars: "); 
    readJars(classLoader); 
    System.out.println("Container jars: "); 
    readJars(parentClassLoader); 
} 

private static void readJars(ClassLoader classLoader) { 
    URLClassLoader urlClassLoader = (URLClassLoader) classLoader; 
    URL[] urls = urlClassLoader.getURLs(); 
    for(URL url: urls){ 
     String filePath = url.getFile(); 
     File file = new File(filePath); 
     if(file.exists() && file.isFile()) { 
      //Apply additional filtering if needed 
      System.out.println(file); 
     } 
    } 
} 
2

निम्नलिखित ग्रहण जेईई केपलर चल स्रोत कोड है कि बाहर स्टार्टअप पर जांच की गई गर्मियों 2016 और डिबगिंग ग्रहण पढ़ते समय जांच की थी।

आपके वर्कस्पेस रूट फ़ोल्डर में एक फ़ाइल है .metadata.plugins \ org.eclipse.jdt.core \ variablesAndContainers.dat। यह फ़ाइल JavaModelManager द्वारा विधि loadVariablesAndContainers से पढ़ी जाती है।

यहाँ JavaModelManager https://git.eclipse.org/c/e4/org.eclipse.jdt.core.git/tree/model/org/eclipse/jdt/internal/core/JavaModelManager.java

के स्रोत variablesAndContainers.dat के भीतर है, मेरा मानना ​​है कि प्रत्येक परियोजना के लिए एक प्रवेश है, और प्रत्येक परियोजना के एक कंटेनर है। आप फ़ाइल में स्ट्रिंग के रूप में कंटेनर नाम देख सकते हैं।

प्रवाह जारी है JavaModelManager $ VariablesAndContainersLoadHelper.loadContainers (IJavaProject)

यहाँ से, फ़ाइल classpath प्रविष्टियों की संख्या की गिनती पढ़ता है। प्रत्येक प्रविष्टि के लिए, यह विधि चर के साथ कंटेनर पढ़ता है VariablesAndContainersLoadHelper.loadClasspathEntry। यह क्लासपाथ प्रविष्टियों की एक सरणी बनाता है जो जावा कंटेनर का प्रतिनिधित्व करता है। यह स्मृति में JavaModelManager.PersistedClasspathContainer के रूप में आयोजित किया जाता है।

यह वही है जो आप एक स्टैंडअलोन एप्लिकेशन बनाते समय ढूंढ रहे हैं। यदि कोई ग्रहण प्लगइन बनाते हैं, तो JavaModelManager.getClasspathContainer के व्यवहार की जांच करें।

आपको कोड का अध्ययन करना होगा, और शायद फ़ाइल के पूरे प्रारूप को समझने के लिए बहुत से ग्रहण स्टार्टअप को डीबग करना होगा।

+0

मैं आपके सुझावों के माध्यम से जा रहा हूं और समाधान प्राप्त करने में सक्षम नहीं हूं .. यह निश्चित रूप से सहायक है। लेकिन मैंने अभी तक इसे स्वीकार नहीं किया है क्योंकि मुझे आउटपुट नहीं मिला है। – Disha

संबंधित मुद्दे