eclipse插件>如何以编程方式包含jar文件

时间:2011-08-01 09:55:10

标签: java eclipse eclipse-plugin

所以...,我已经为Eclipse创建了一个插件,它可以从模板等生成一个新的java项目和广告文件......然而,/ src目录中的代码无法编译,因为我需要添加一个jar文件我必须到库标签。

该项目已经是一个Java项目:

org.eclipse.jdt.core.IJavaProject javaProject = org.eclipse.jdt.core.JavaCore.create(proj);
            org.eclipse.jdt.core.IClasspathEntry src = JavaCore.newSourceEntry(folder.getFullPath());
            IClasspathEntry jre = JavaCore.newContainerEntry(new Path(
                    org.eclipse.jdt.launching.JavaRuntime.JRE_CONTAINER), new IAccessRule[0],
                    new IClasspathAttribute[] {
                        JavaCore.newClasspathAttribute("owner.project.facets", "java")
                    }, false);
            IClasspathEntry[] entries = new IClasspathEntry[] {
                    src, jre
            };
            javaProject.setRawClasspath(entries, proj.getFullPath().append("bin"), new NullProgressMonitor());

现在,基本上,我需要按程序设计,“添加Jars ...”按钮的功能。 enter image description here

已经挣扎了一段时间......

任何代码提示或指向教程的链接都会对您有所帮助。请没有链接到通用Eclipse插件教程:)因为我现在可能已经看到了所有这些...

Thnx很多

2 个答案:

答案 0 :(得分:1)

不确定如何通过eclipse API执行此操作,但是所有jar配置窗口都会写入project-name/.classpath文件,如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
        <classpathentry kind="lib" path="x-jars/lucene-fast-vector-highlighter-3.0.3-patch1822.jar"/>
        <classpathentry kind="lib" path="x-jars/lucene-highlighter-3.0.3.jar"/>

所以一个选项是让你的设置代码在项目创建后编辑这个文件,但这可能是你想要的黑客攻击。

答案 1 :(得分:1)

这是我如何做到的,不确定你的要求是否完全一样,但希望它能以某种方式帮助......

        IFile file = addJar(project, "/resources/myJar.jar", MY_JAR_TARGET_PATH, monitor); //$NON-NLS-1$
        newcpEntries.add(JavaCore.newLibraryEntry(file.getFullPath(), null, null, false));
        // .....

其中addJar()看起来像这样:

private static IFile addJar(IProject project, String srcPath, String targetPath, IProgressMonitor monitor) {
    URL srcURL = MyPlugin.getDefault().getBundle().getEntry(srcPath);
    IFile file = project.getFile(targetPath);
    InputStream is = null;
    try {
        is = srcURL.openStream();
        file.create(is, true, monitor);
    } catch (CoreException e) {//...
              } catch (IOException e) {//...
              }
    finally {
        try {
            if (is != null)
                is.close();
        } catch (IOException ignored) {}
    }
    return file;
}