以插件编程方式在Java Eclipse项目中设置JRE

3
我将尝试为我的插件编程创建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 系统库未设置。

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

4个回答

3
entries.add(JavaRuntime.getDefaultJREContainerEntry());

不幸的是,这会导致类转换异常:java.lang.ClassCastException: org.eclipse.wst.jsdt.internal.core.ClasspathEntry不能被转换为org.eclipse.jdt.core.IClasspathEntry - Peter
org.eclipse.jdt.launching.JavaRuntime 中,该方法的定义为 public static org.eclipse.jdt.core.IClasspathEntry getDefaultJREContainerEntry() :| - shyam

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);               

1

0
            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();
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接