以编程方式将库添加到Eclipse项目中

时间:2010-12-01 15:00:43

标签: eclipse import eclipse-plugin buildpath

如何为任何* .jar文件创建新的构建路径条目,并将此类路径条目添加到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库?

此致 弗洛里安

4 个答案:

答案 0 :(得分:1)

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

如您所述,您需要创建自定义类路径容器。首先,通过执行此扩展点来创建类路径容器扩展:

org.eclipse.jdt.core.classpathContainerInitializer

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

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

答案 1 :(得分:1)

Here你可以找到一些例子,如何为java项目定义新的类路径条目和类路径容器。我认为阅读这个问题的人会很方便。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

;;(global-set-key (kbd "C-M-q") nil)
;;(global-unset-key (kbd "C-M-q"))
;;(global-set-key (kbd "C-M-q") 'shrink-window-horizontally)
(global-set-key (kbd "C-M-y") 'shrink-window-horizontally)
(global-set-key (kbd "C-M-w") 'shrink-window)
(global-set-key (kbd "C-M-e") 'enlarge-window)
(global-set-key (kbd "C-M-r") 'enlarge-window-horizontally)

请注意,正如Andrew Eisenberg所提到的,您需要在插件的MANIFEST.MF中包含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); } 插件依赖项。

请注意,您可能还需要programmatically refresh the project