开发者

Setting the JRE of java eclipse project in plugin programmatically

I Am trying to create eclipse projects programmatically for my plugin. I used this code to create the projects:

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

    IProjectDescription description = proje开发者_运维技巧ct.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);

But as it runs in an eclipse application the JRE system library is not set.

So how do you add the JRE programmatically to an project in an eclipse application?


entries.add(JavaRuntime.getDefaultJREContainerEntry());


Works for me.

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


PreferenceConstants.getDefaultJRELibrary();

The default JRE of an Eclipse is stored in the preferences, so the call above should provide you with the Java Runtime Environment Library.

From a more extensive source with great info on creating a Project programmatically: http://www.pushing-pixels.org/2008/11/18/extending-eclipse-creating-a-java-project-without-displaying-a-wizard.html


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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜