2010-12-01 92 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

相关问题