2

对于自定义eclipse 插件,如何将当前在 eclipse 包资源管理器中的项目包含到其类路径中。

这个自定义的 eclipse 插件正在尝试执行TestNG,但是在 eclipse 中打开的项目对 testNG 是不可见的。我希望在 eclipse 插件的当前类路径中包含项目将解决这个问题。

基本上它与以编程方式更改 Eclipse 插件的运行时类路径有关。

任何形式的帮助将不胜感激。

4

1 回答 1

1

这不是一个完整的答案,但会帮助您思考您需要编写什么代码。

为具有插件性质的项目创建一个弹出菜单贡献,其标签类似于“将 Java 项目添加到类路径”。

在您的操作或命令处理程序中,这是我认为需要到位的代码:

  • 获取对您选择的插件项目的参考。

  • 创建一个列表,其中将包含工作区中所有打开的 Java 项目的列表。

  • 确保将org.eclipse.core.resources依赖项添加到您的捆绑包中。

  • 通过调用获取工作区中的项目列表

    ResourcesPlugin.getWorkspace().getRoot().getProjects(); 
    
  • 对于每个项目调用if(project.getNature("org.eclipse.jdt.core.javanature")不返回 null。

  • 将项目添加到打开的 Java 项目列表中。还要确保您没有添加您选择的插件项目,因为它也具有 Java 特性。如果您只想添加 java 项目而不是插件项目,则需要额外检查它是否具有插件性质,如果是,则排除它。

现在有趣的部分。IWorkbenchWindowActionDelegate如果您正在实现命令处理程序或接口,请获取对您的插件项目的引用。

因为插件项目也具有 java 特性,所以一旦您引用了插件 IProject,您就可以执行此操作

IJavaProject javaProject = JavaCore.create(mySelectedProject);
IClasspathEntry[] entries = javaProject.getRawClasspath();


List<IClassPathEntry> newEntries - new ArrayList<IClassPathEntry>(); 
// for each IProject in your active java project list. 
foreach(IProject project: activeProjects)  { 
    IJavaProject currentProject = JavaCore(project); 

    IPath srcPath= currentProject.getPath().append("target/generated-sources");
    IClasspathEntry srcEntry= JavaCore.newSourceEntry(srcPath, null);
    newEntries.add(srcEntry);   
}

// after processing each open java project we found and adding a new IClassPathEntry we now set the 
// updated class path entries on the selected plugin/java project. 

newEntries.add(entries); 
IClassPathEntry[] newEntryArray = newEntries.toArray(new IClassPathEntry[newEntries.size()]);

javaProject.setRawClassPath(newEntries, null)

现在我不完全知道的部分:将更改保存到磁盘,看看这篇文章: 使用 Eclipse 插件将修改后的 AST 保存在新文件中

于 2013-10-02T12:37:46.887 回答