2015-06-15 117 views
1

在下面的圖片,我想修改常春藤類路徑條目

  1. ivy設置路徑不包括$ {ivyproject_loc}
  2. 屬性文件不包括$ {project_loc}

這是我現在所擁有的。我想這可能會更容易刪除常春藤圖書館,並以我想要的方式添加它。我知道如何添加,但刪除的最佳方法是什麼?

protected void changeIvyClasspath(IProject project) throws CoreException { 

    if(project.hasNature(JavaCore.NATURE_ID)){ 
     IJavaProject jproject = JavaCore.create(project); 
     IClasspathEntry[] entries = jproject.getRawClasspath(); 
     for (IClasspathEntry entry : entries) { 
      if(entry.toString().contains("org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER")){ 
       if(entry.toString().contains("project_loc") || entry.toString().contains("ivyproject_loc")){ 
        //how to remove entry? 

        addIvyToClasspath(); 
       } 
      } 
     } 
    } 
} 

我試過的其他東西是修改現有的設置,但它沒有工作。

這裏是試圖做到這一點的代碼:

protected void changeIvyClasspath(IProject project) throws CoreException { 

    if(project.hasNature(JavaCore.NATURE_ID)){ 
     IJavaProject jproject = JavaCore.create(project); 
     IClasspathEntry[] entries = jproject.getRawClasspath(); 
     for (IClasspathEntry entry : entries) { 
      if(entry.toString().contains("org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER")){ 
       if(entry.toString().contains("project_loc") || entry.toString().contains("ivyproject_loc")){ 
        IvyClasspathContainer ivycp = IvyClasspathContainerHelper.getContainer(entry.getPath(), jproject); 
        IvyClasspathContainerConfiguration conf = new IvyClasspathContainerConfiguration(jproject, "ivy.xml", true); 
        SettingsSetup ss = conf.getIvySettingsSetup(); 
        List<String> props = new ArrayList<String>(); 
        props.add("project.properties"); 
        props.add(".properties/eclipse.properties"); 
        ss.setPropertyFiles(props); 
        conf.setIvySettingsSetup(ss); 
        ss.setIvySettingsPath(".properties/ivysettings.xml"); 
        ivycp.setConf(conf); 
        ivycp.launchResolve(false, null); 
       } 
      } 
     } 
    } 
} 

回答

0

的工程,你可以得到所有的類路徑條目。我經歷了並排除了常春藤項目。然後我重新添加了正確的類路徑和屬性文件。現在,路徑不包含$ {ivyproject_loc}和$ {project_loc}。

下面是代碼:

protected void changeIvyClasspath(IProject project, IProgressMonitor monitor) throws CoreException { 

    if(project.hasNature(JavaCore.NATURE_ID)){ 
     IJavaProject jproject = JavaCore.create(project); 
     List<IClasspathEntry> iClasspathEntryList = new ArrayList<IClasspathEntry>(); 

     IClasspathEntry[] entries = jproject.getRawClasspath(); 
     for (IClasspathEntry entry : entries) { 
      //exclude ivy.xml entries 
      if (!entry.getPath().toString().contains("ivy.xml")) { 
       iClasspathEntryList.add(entry); 
      } 
     } 

     //Add the ivy entries with the correct class path 
     addIvyToClasspath(new String[] { "compile", "runtime" }, true, iClasspathEntryList, project, jproject, monitor); 
     addIvyToClasspath(new String[] { "provided", "test" }, false, iClasspathEntryList, project, jproject, monitor); 

     entries = iClasspathEntryList.toArray(new IClasspathEntry[iClasspathEntryList.size()]); 

     jproject.setRawClasspath(entries, jproject.getOutputLocation(), null); 
    } 
}