2010-12-01 190 views
7

如何爲任何* .jar文件創建新的構建路徑條目並將此類路徑條目添加到Eclipse項目的構建路徑。以編程方式將庫添加到Eclipse項目

我有一個應該自動設置我的目標項目的插件。所以這個項目需要有一些庫導入,我想使用嚮導自動添加這個導入。用戶只需選擇某個SDK的位置,然後一些庫必須與目標項目鏈接。

然而,我發現一些參考:

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。

我正在使用Eclipse Helios和JDK。我是否需要任何其他庫來對構建路徑進行更改,還是有更簡單的解決方案來以編程方式導入jar庫?

問候, 弗洛裏安

回答

1

我假設你正在創建一個插件,需要你的插件管理添加到類路徑額外的罐子。

正如您所提到的,您需要創建一個自定義類路徑容器。首先,通過exending這個擴展點創建的類路徑容器延長:

org.eclipse.jdt.core.classpathContainerInitializer 

然後,您創建一個實現org.eclipse.jdt.core.IClasspathContainer類,並將其與剛剛創建的擴展點相關聯。

你提到你找不到org.eclipse.jdt.core.IClasspathContainer接口。您需要確保您的插件在其MANIFEST.MF中引用了org.eclipse.jdt.core插件。

+0

我下載後忘記了包含Java開發工具。修正後,我使用教程aboth來創建自定義類容器。 – Florian 2010-12-05 19:00:33

1

Here你可以找到一些例子,如何定義新的類路徑條目和類路徑容器到Java項目。我認爲這對於閱讀這個問題的人來說很有幫助。

0

爲了獲得訪問IJavaProject等,轉到您的plugin.xml並將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); 
} 

需要注意的是安德魯·艾森伯格提到的,你需要在你的插件的MANIFEST.MF的org.eclipse.jdt.core插件依賴性。請注意,您也可能需要programmatically refresh the project

相關問題