JDT中没有Eclipse环境的IJavaProject

JDT中没有Eclipse环境的IJavaProject,eclipse,eclipse-plugin,eclipse-jdt,Eclipse,Eclipse Plugin,Eclipse Jdt,我的服务器中有一个导出的EclipseJava项目,我希望能够编译该项目并将ASTParser与JDT一起使用 我可以使用BatchCompiler编译该项目,但是它在控制台上运行,并给我PrintWriter而不是一系列问题和错误。另外,我希望能够在Eclipse中使用建议,并且BatchCompiler不是为此目的而构建的 因此,我尝试使用ASTParser,它可以与char[]或ICompilationUnit一起使用CompletionProposalCollector和org.ecli

我的服务器中有一个导出的EclipseJava项目,我希望能够编译该项目并将
ASTParser
与JDT一起使用

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

因此,我尝试使用
ASTParser
,它可以与
char[]
ICompilationUnit
一起使用
CompletionProposalCollector
org.eclipse.jdt.internal.compiler.compiler.compiler
需要
ICompilationUnit
,因此我必须创建一个
ICompilationUnit
,它只能由IJavaProject()创建才能使用这些功能

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


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

我也遇到过类似的问题。下面是如何在没有Eclipse的情况下使用
ASTParser
(它只需要类路径上的核心JDT JAR):

我遇到了类似的问题。下面是如何在不使用Eclipse的情况下使用
ASTParser
(它只需要类路径上的核心JDT JAR):

从注释中可以看出,您尝试的不仅仅是解析,实际上您还想获得某种形式的内容辅助

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

  • 在您的服务器上运行一个headless Eclipse,该服务器在实际工作区的顶部工作。这将是最容易实现的,但将是资源最密集、最不灵活的做事方式
  • 使用jdt核心jar,创建IResource层次结构的替代实现,以及解析器和CompletionEngine使用的JFace部分。这可能是功能最丰富的方式,但也是最脆弱的方式。我不能保证这会起作用,因为您可能需要为内部Eclipse非API类创建一些非常复杂的存根
  • 完全避免CompletionEngine和ASTParser,只使用批处理编译器。然后需要提供org.eclipse.jdt.internal.compiler.env.INameEnvironment的替代实现。此实现将能够在实际项目结构中找到类型、文件和编译单元。您需要重新实现对内容辅助的支持,但这很可能工作得相当好

  • 实际上,我对做这样的事情很感兴趣(但我没有时间去做)。如果您正在认真考虑创建一个可以在服务器上运行的无头JDT,请随时询问更多信息。我对JDT的内部结构非常熟悉。

    从评论中可以看出,您尝试的不仅仅是解析,实际上还希望获得某种形式的内容帮助

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

  • 在您的服务器上运行一个headless Eclipse,该服务器在实际工作区的顶部工作。这将是最容易实现的,但将是资源最密集、最不灵活的做事方式
  • 使用jdt核心jar,创建IResource层次结构的替代实现,以及解析器和CompletionEngine使用的JFace部分。这可能是功能最丰富的方式,但也是最脆弱的方式。我不能保证这会起作用,因为您可能需要为内部Eclipse非API类创建一些非常复杂的存根
  • 完全避免CompletionEngine和ASTParser,只使用批处理编译器。然后需要提供org.eclipse.jdt.internal.compiler.env.INameEnvironment的替代实现。此实现将能够在实际项目结构中找到类型、文件和编译单元。您需要重新实现对内容辅助的支持,但这很可能工作得相当好

  • 实际上,我对做这样的事情很感兴趣(但我没有时间去做)。如果您正在认真考虑创建一个可以在服务器上运行的无头JDT,请随时询问更多信息。我非常熟悉JDT内部结构。

    当前版本的程序与您的示例类似,当我使用char[]作为ASTParser的源时,它会创建CompilationUnit,而我无法编译项目或使用提案。要使用提案API,您需要一个工作区。有太多的依赖关系需要解决。如果你能解释一下你需要实现什么,也许我可以帮你。为什么AST不够?“在线java Web IDE”->查看Orject Project()。@ OrIon是不是java IDE(),我的观点是,如果你正在考虑为Web浏览器构建一个java IDE,那么你可以从OrIon开始作为你的基础。它提供了您需要的结构,例如工作区、项目等。您所询问的内容…当前版本的程序与您的示例类似,当我使用char[]作为ASTParser的源时,它会创建CompilationUnit,而我无法编译项目或使用提案。要使用提案API,您需要一个workspac