2011-08-08 21 views
2

私はプラグインのためにプログラムでEclipseプロジェクトを作成しようとしています。プラグインでプラグインのjava eclipseプロジェクトのJREをプログラムで設定する

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をプログラムで追加するにはどうすればよいですか?

答えて

1
entries.add(JavaRuntime.getDefaultJREContainerEntry()); 
+0

残念ながらこれは、クラスキャスト例外を与える: とjava.lang.ClassCastException:org.eclipse.wst.jsdt.internal.core.ClasspathEntryはorg.eclipse.jdt.coreにキャストすることはできませんが。 IClasspathEntry – Peter

+0

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