2013-09-25 49 views
2

對於自定義的eclipse插件,如何將當前在eclipse package explorer中的項目包含到類路徑中。

這個自定義Eclipse插件試圖執行TestNG,但在eclipse中打開的項目對testNG不可見。我希望在Eclipse插件的當前類路徑中包含項目將解決此問題。

基本上它涉及到,以編程方式更改Eclipse插件的運行時類路徑。如何在eclipse-plugin的類路徑中包含當前打開的java項目?

任何形式的幫助將不勝感激。

回答

0

這不是一個完整的答案,但會幫助您考慮需要編碼的內容。

爲具有插件性質的項目創建一個poup菜單貢獻,其標籤類似於「將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) 

現在部分我不完全知道:保存到磁盤的變化,採取看看這篇文章: Saving modified AST in a new file with eclipse plugin

+0

謝謝你的時間鄧肯。 但我試圖找出一種方法來將IClassPathEntries包含在我的插件類路徑的運行時。假設我的插件安裝在您的eclipse中,那麼它應該能夠在您的eclipse中的自己的類路徑中包含現有的Java項目。 – vionixt

相關問題