7

如何为任何 *.jar 文件创建新的构建路径条目并将此类路径条目添加到 Eclipse 项目的构建路径中。

我有一个应该自动设置我的目标项目的插件。所以这个项目需要有一些库导入,我想使用向导自动添加这些导入。用户只需选择某个 SDK 的位置,然后一些库必须与目标项目链接。

但是,我找到了一些参考资料:

以编程方式在 Eclipse 中导入库

如何将文件夹作为库添加到 java 构建路径,其中包含多个 jar 或条目?

不幸的是,我未能实现第二个解决方案,因为我找不到 IClasspathContainer、JavaCore 和 IJavaProject 类。

我正在使用 Eclipse Helios 和 JDK。我是否需要任何其他库来更改构建路径,或者是否有更简单的解决方案来以编程方式导入 jar 库?

问候,弗洛里安

4

4 回答 4

1

我假设您正在创建一个插件并且需要您的插件来管理添加到类路径中的额外 jar。

正如您所提到的,您需要创建一个自定义类路径容器。首先,通过扩展此扩展点创建类路径容器扩展:

org.eclipse.jdt.core.classpathContainerInitializer

然后,您创建一个实现 org.eclipse.jdt.core.IClasspathContainer 的类,并将它与您刚刚创建的扩展点相关联。

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

于 2010-12-04T23:41:28.467 回答
1

在这里您可以找到一些示例,如何为 java 项目定义新的类路径条目和类路径容器。我认为这对阅读这个问题的人来说会很方便。

于 2013-03-26T13:39:24.313 回答
0

为了访问 IJavaProject 等,请转到您的 plugin.xml 并添加org.eclipse.jdt.core到类路径中。此后,您可以将这些包导入到您的项目中。

于 2014-08-25T09:56:33.117 回答
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);
}

请注意,正如 Andrew Eisenberg 所提到的,您需要org.eclipse.jdt.core在插件的 MANIFEST.MF 中包含插件依赖项。

请注意,您可能还需要以编程方式刷新项目

于 2017-04-14T21:09:01.223 回答