JDT中没有Eclipse环境的IJavaProject

时间:2013-05-22 12:42:47

标签: eclipse eclipse-plugin eclipse-jdt

我的服务器中有一个导出的Eclipse Java项目,我希望能够编译项目并使用ASTParser和JDT。

我可以使用BatchCompiler编译项目,但是它在控制台上运行并给我PrintWriter而不是一系列问题和错误。此外,我希望能够在Eclipse中使用提议,并且BatchCompiler没有为此目的而构建。

因此我尝试使用ASTParser,它可以与char[]ICompilationUnit一起使用。 CompletionProposalCollectororg.eclipse.jdt.internal.compiler.Compiler.Compiler需要ICompilationUnit所以我必须创建一个只能由IJavaProject(https://dl.dropboxusercontent.com/u/10773282/2012/eclipse_workspace.pdf)创建的ICompilationUnit才能使用这些功能。

似乎创建IJavaProject的唯一方法是使用ResourcesPlugin.getWorkspace(),但它会在我的计算机上返回java.lang.IllegalStateException: Workspace is closed.,似乎原因是我编写的程序不是Eclipse插件。

有没有办法在没有Eclipse环境的情况下创建IJavaProject?

2 个答案:

答案 0 :(得分:3)

从评论中看,您似乎只是尝试做的不仅仅是解析,您实际上想要获得某种形式的内容辅助。

我担心你要求的太多了。没有简单的方法可以在运行的Eclipse实例之外获得JDT的强大功能和灵活性(相信我,我已经尝试过了)。没有简单的方法,但如果你有勇敢和坚强的意志,你可以尝试以下方法:

  1. 在服务器上运行无头Eclipse,它在实际工作空间之上运行。这将是最容易实现的,但它将是资源最密集且最不灵活的做事方式。
  2. 使用jdt核心jar,并创建IResource层次结构的替代实现,以及解析器和CompletionEngine使用的JFace部分。这可能是功能最丰富的方式,但也是最脆弱的。我不能保证这会起作用,因为您可能需要为内部Eclipse非API类创建一些非常复杂的存根。
  3. 完全避免使用CompletionEngine和ASTParser,只使用批处理编译器。然后,您需要提供org.eclipse.jdt.internal.compiler.env.INameEnvironment的备用实现。此实现将能够在实际项目结构中查找类型,文件和编译单元。您需要重新支持内容辅助,但这很可能会相当不错。
  4. 我实际上对做这样的事情很感兴趣(但我没时间去做)。如果您正在认真考虑创建可在服务器上运行的无头JDT,请随时询问更多信息。我对JDT内部非常熟悉。

答案 1 :(得分:2)

我遇到了类似的问题。以下是如何在没有Eclipse的情况下使用ASTParser(它只需要类路径上的核心JDT JAR):http://blog.pdark.de/2010/11/05/using-eclipse-to-parse-java-code/