2010-12-01 15 views
7

पर लाइब्रेरी जोड़ना किसी भी * .jar फ़ाइल के लिए मैं एक नई बिल्ड पथ प्रविष्टि कैसे बना सकता हूं और इस क्लासपाथ एंट्री को ग्रहण प्रोजेक्ट के निर्माण पथ में जोड़ सकता हूं।प्रोग्रामिंग रूप से एक ग्रहण प्रोजेक्ट

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

हालांकि, मैं कुछ संदर्भों पाया:

Importing libraries in Eclipse programmatically

How to add a folder to java build path as library, having multiple jars or entries in it?

दुर्भाग्य से, मैं दूसरा समाधान को लागू करने के रूप में मैं कक्षाओं IClasspathContainer, JavaCore और IJavaProject नहीं मिल सकता है विफल रहा है।

मैं ग्रहण हेलीओस और जेडीके का उपयोग कर रहा हूं। क्या मुझे बिल्ड पथ में बदलाव करने के लिए कोई अतिरिक्त पुस्तकालयों की आवश्यकता है या क्या प्रोग्रामिंग रूप से जार लाइब्रेरी आयात करने का कोई आसान समाधान है?

सादर, फ्लोरियन

उत्तर

1

मैं यह सोचते हैं रहा है कि आप एक प्लगइन बनाने और कर रहे हैं classpath में जोड़े गए अतिरिक्त जार प्रबंधन करने के लिए अपने प्लगइन की जरूरत है।

जैसा कि आप उल्लेख करते हैं, आपको कस्टम क्लासपाथ कंटेनर बनाने की आवश्यकता है। सबसे पहले, इस विस्तार बिंदु exending द्वारा classpath कंटेनर एक्सटेंशन बनाने:

org.eclipse.jdt.core.classpathContainerInitializer 

उसके बाद, आप एक वर्ग है कि org.eclipse.jdt.core.IClasspathContainer लागू करता है बना सकते हैं और विस्तार बिंदु आपने अभी बनाया के साथ संबद्ध।

आप उल्लेख करते हैं कि आप org.eclipse.jdt.core.IClasspathContainer इंटरफ़ेस नहीं ढूंढ सकते हैं। आपको यह सुनिश्चित करने की ज़रूरत है कि आपकी प्लगइन orig.eclipse.jdt.core प्लगइन को इसके MANIFEST.MF में संदर्भित करे।

+0

मैं उन्हें डाउनलोड करने के बाद जावा डेवलपर टूल्स को शामिल करना भूल गया। यह तय करने के बाद, मैंने कस्टम क्लास कंटेनर बनाने के लिए ट्यूटोरियल का उपयोग किया। – Florian

1

Here आप कुछ उदाहरण पा सकते हैं, नई परियोजनाओं और क्लासपाथ कंटेनरों को जावा परियोजनाओं में कैसे परिभाषित किया जाए। मुझे लगता है कि यह इस प्रश्न को पढ़ने वाले किसी के लिए आसान होगा।

0

IJavaProject इत्यादि तक पहुंच प्राप्त करने के लिए, your plugin.xml goto और classpath में org.eclipse.jdt.core जोड़ें। इसके बाद आप उन परियोजनाओं को अपने प्रोजेक्ट में आयात कर सकते हैं।

0
String projectName = "MyProject"; // project to add a library to 
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); 
IJavaProject jProject = JavaCore.create(project); 

for(File file : new File("path-to-some-directory-of-libraries-to-add").listFiles()){ 
    if(file.isFile() && file.getName().endsWith(".jar")){ 
     addProjectLibrary(jProject, file); 
    } 
} 

private static void addProjectLibrary(IJavaProject jProject, File jarLibrary) throws IOException, URISyntaxException, MalformedURLException, CoreException { 
    // copy the jar file into the project 
    InputStream jarLibraryInputStream = new BufferedInputStream(new FileInputStream(jarLibrary)); 
    IFile libFile = jProject.getProject().getFile(jarLibrary.getName()); 
    libFile.create(jarLibraryInputStream, false, null); 

    // create a classpath entry for the library 
    IClasspathEntry relativeLibraryEntry = new org.eclipse.jdt.internal.core.ClasspathEntry(
     IPackageFragmentRoot.K_BINARY, 
     IClasspathEntry.CPE_LIBRARY, libFile.getLocation(), 
     ClasspathEntry.INCLUDE_ALL, // inclusion patterns 
     ClasspathEntry.EXCLUDE_NONE, // exclusion patterns 
     null, null, null, // specific output folder 
     false, // exported 
     ClasspathEntry.NO_ACCESS_RULES, false, // no access rules to combine 
     ClasspathEntry.NO_EXTRA_ATTRIBUTES); 

    // add the new classpath entry to the project's existing entries 
    IClasspathEntry[] oldEntries = jProject.getRawClasspath(); 
    IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1]; 
    System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length); 
    newEntries[oldEntries.length] = relativeLibraryEntry; 
    jProject.setRawClasspath(newEntries, null); 
} 

ध्यान दें कि के रूप में एंड्रयू Eisenberg उल्लेख किया है, तो आप अपने प्लगइन के MANIFEST.MF में org.eclipse.jdt.core प्लगइन निर्भरता को शामिल करने की जरूरत है।

ध्यान दें कि आपको programmatically refresh the project भी आवश्यकता हो सकती है।

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