[英]Modify existing Java source programatically with Eclipse JDT ASTRewrite as a standalone application
[英]Use JDT to extract IcompilationUnits in a standalone Java application
我正在編寫一個普通的Java應用程序,並且想要提取輸入項目的所有ICompilationUnit(Eclipse不必開發該項目)。 由於我沒有開發Eclipse插件,因此無法使用以下代碼提取ICompilationUnit:
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPath path = Path.fromOSString(source.getAbsolutePath());
IFile file = workspace.getRoot().getFileForLocation(path);
ICompilationUnit compilationUnit = (ICompilationUnit) JavaCore.create(file);
當前,我正在使用下面的代碼來解析輸入的Java文件。 (str包含輸入java文件的源代碼)
ASTParser parser = ASTParser.newParser(AST.JLS12);
parser.setSource(str.toCharArray());
parser.setKind(ASTParser.K_COMPILATION_UNIT);
CompilationUnit cu = (CompilationUnit) parser.createAST(null);
但是,以下代碼返回null,因為它不是從Java元素創建的。
ICompilationUnit icu = (ICompilationUnit)compilationUnit.getJavaElement();
問:在普通的Java應用程序中,有什么方法可以提取ICompilationUnits?
JDT搜索引擎需要一個索引 。 在IDE中,索引是在工作空間構建期間創建的。 這意味着沒有工作空間,就沒有使用現成的搜索引擎方法。
從理論上講,可以實現自己的索引,但是絕對不建議這樣做。
剩下兩個選擇:
如評論中所述,使用您自己遍歷的現有類,或者
讓您的應用程序在后台將您的代碼作為真實Java項目導入其中的后台初始化工作區。 建立該工作台后,搜索引擎應該可用。 所有這些都可以在無頭的應用程序中發生,而無需啟動Eclipse UI。
有關選項(2)的靈感,您可以從這里開始:
-data
命令行參數傳遞的位置中,工作空間將自動可用。 如果您想實時查看所有內容,建議您在源代碼中設置一個包含JDT和PDE項目的工作區。 最簡單的方法是為此使用Oomph 。
上面的CoreTestApplication將運行,如果您選擇任何測試類,請調用Run as > Run configurations...
然后創建JUnit Plug-in Test
類型的啟動配置,並在選項卡上Main
選擇Run an application: [No Application] - Headless Mode
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.