【问题标题】:Setting the JRE of java eclipse project in plugin programmatically以编程方式在插件中设置java eclipse项目的JRE
【发布时间】:2011-08-08 13:39:44
【问题描述】:

我正在尝试以编程方式为我的插件创建 Eclipse 项目。我使用此代码创建项目:

IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
    IProject project = workspaceRoot.getProject(projectName);
    project.create(null);
    project.open(null);

    IProjectDescription description = project.getDescription();
    description.setNatureIds(new String[] { JavaCore.NATURE_ID });
    project.setDescription(description, null);

    IJavaProject javaProject = JavaCore.create(project); 

    IFolder binFolder = project.getFolder("bin");
    binFolder.create(false, true, null);
    javaProject.setOutputLocation(binFolder.getFullPath(), null);

    List<IClasspathEntry> entries = new ArrayList<IClasspathEntry>();

    IVMInstall vmInstall = JavaRuntime.getDefaultVMInstall();
    LibraryLocation[] locations = JavaRuntime.getLibraryLocations(vmInstall);
    for (LibraryLocation element : locations) {
        entries.add(JavaCore.newLibraryEntry(element.getSystemLibraryPath(), null, null));
    }

    javaProject.setRawClasspath(entries.toArray(new IClasspathEntry[entries.size()]), null);

    IFolder sourceFolder = project.getFolder("src");
    sourceFolder.create(false, true, null);

    IPackageFragmentRoot packageRoot = javaProject.getPackageFragmentRoot(sourceFolder);
    IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
    IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
    System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
    newEntries[oldEntries.length] = JavaCore.newSourceEntry(packageRoot.getPath());
    javaProject.setRawClasspath(newEntries, null);

但由于它在 Eclipse 应用程序中运行,因此未设置 JRE 系统库。

那么如何以编程方式将 JRE 添加到 Eclipse 应用程序中的项目中?

【问题讨论】:

    标签: eclipse plugins java


    【解决方案1】:
    entries.add(JavaRuntime.getDefaultJREContainerEntry());
    

    【讨论】:

    • 不幸的是,这给出了一个类转换异常:java.lang.ClassCastException: org.eclipse.wst.jsdt.internal.core.ClasspathEntry 不能转换为 org.eclipse.jdt.core.IClasspathEntry跨度>
    • org.eclipse.jdt.launching.JavaRuntime 中的方法定义是public static org.eclipse.jdt.core.IClasspathEntry getDefaultJREContainerEntry() :|
    【解决方案2】:

    为我工作。

    IPath containerPath = new Path(JavaRuntime.JRE_CONTAINER);              
    IVMInstall vmInstall = JavaRuntime.getDefaultVMInstall();
    IPath vmPath = containerPath
        .append(vmInstall.getVMInstallType().getId())
        .append(vmInstall.getName());
    IClasspathEntry jreEntry = JavaCore.newContainerEntry(vmPath);               
    

    【讨论】:

      【解决方案3】:

      PreferenceConstants.getDefaultJRELibrary();

      Eclipse 的默认 JRE 存储在首选项中,因此上面的调用应该为您提供 Java 运行时环境库。

      来自更广泛的来源,其中包含有关以编程方式创建项目的重要信息: http://www.pushing-pixels.org/2008/11/18/extending-eclipse-creating-a-java-project-without-displaying-a-wizard.html

      【讨论】:

        【解决方案4】:
                    IClasspathEntry[] jreClasspaths=org.eclipse.jdt.ui.PreferenceConstants.getDefaultJRELibrary();
        
                IClasspathEntry[] oldClasspathEntries=null;
                try{
                    oldClasspathEntries=javaProject.getRawClasspath();
                }catch(JavaModelException e){
                    e.printStackTrace();
                }
        
                Set<IClasspathEntry> newClasspathEntries=new HashSet<IClasspathEntry>();
                newClasspathEntries.addAll(Arrays.asList(jreClasspaths));
                newClasspathEntries.addAll(Arrays.asList(oldClasspathEntries));
                try{
                    javaProject.setRawClasspath(newClasspathEntries.toArray(new IClasspathEntry[newClasspathEntries.size()]), monitor);
                }catch(JavaModelException e){
                    e.printStackTrace();
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多