可以在headless模式下使用JDT加载eclipsejava项目吗?

可以在headless模式下使用JDT加载eclipsejava项目吗?,java,eclipse,eclipse-jdt,headless,Java,Eclipse,Eclipse Jdt,Headless,我有一个EclipseJava项目,希望获得项目源目录、类路径等信息。我当前的实现解析.project文件。但是,由于我没有找到任何描述.project文件结构的官方文档,我对这种方法的健壮性有些担心 一种更方便、更健壮的方法是使用JDT(headless)加载项目,并从IJavaProject对象获取相关信息 尽管JDT的开发者指南说 JDT核心包允许您访问Java模型对象和无头Java IDE基础结构 我可以找到的所有打开现有Java项目的示例都是从工作区中的项目中获取IJavaProjec

我有一个EclipseJava项目,希望获得项目源目录、类路径等信息。我当前的实现解析
.project
文件。但是,由于我没有找到任何描述
.project
文件结构的官方文档,我对这种方法的健壮性有些担心

一种更方便、更健壮的方法是使用JDT(headless)加载项目,并从
IJavaProject
对象获取相关信息

尽管JDT的开发者指南说

JDT核心包允许您访问Java模型对象和无头Java IDE基础结构

我可以找到的所有打开现有Java项目的示例都是从
工作区中的项目中获取
IJavaProject
对象,或者使用
IProject
对象。但是我找不到将项目添加到
工作区
或从
项目
文件的路径构建
I项目/IJavaProject
的方法

有人能帮忙吗?

请参阅,以获取一个允许您在Eclipse项目中工作的项目

几年前我使用过它,发现它对于长期使用和构建脚本来说太脆弱了。我建议不要依赖内部Eclipse的东西。它们坏了!通常在混合时释放


相反,我建议你搬到Maven。这需要做更多的工作,但允许您使用整个maven基础设施和API来完成工作。您在这里想要实现的目标,可能已经可以使用Maven插件了。

是的,并且可以通过清晰稳定的API来实现。
org.eclipse.jdt.core
是一个插件,就像
org.eclipse.core.resources
(在这里您可以得到一个
IWorkspace
实例),它们都希望在Eclipse运行时中运行,如果您是这样编写Eclipse应用程序的,那么它可能是无头的。JDT使用
.classpath
文件记录源、库和构建输出的位置,以及要使用的库的抽象引用,而
.project
文件记录的是它通常是什么类型的项目--Java、PHP、Web、,这些或其他的一些组合——以及关于构建器要执行什么的更多信息

所以,让自己成为一个无头Eclipse应用程序,或者将最终目标功能打包在其中


谢谢。但ant4eclipse似乎没有导出可直接用于Java项目的API。切换到Maven或Gradle可能是一个可行的选择,如果已经有库可以读取相应的配置和工具来将Eclipse项目转换为Maven或Gradle项目。获得
工作区
JavaCore
非常有用,但我的问题实际上是获取/构造
IJavaProject
对象,调用
getResolvedClasspath
时需要该对象。一个会给你一个IProject,另一个可以用它给你相应的IJavaProject。你是说
JavaCore.create(IProject)
方法吗?它需要一个
IProject
参数,而
IProject
的唯一实现者,即
Project
,有一个
受保护的
构造函数
WorkspaceRoot.getProject(String)
返回一个
项目
,但我需要一个
工作区
来获取
WorkspaceRoot
。在无头设置中,调用
ResourcePlugin.getWorkspace()
直接触发异常
java.lang.IllegalStateException:Workspace关闭
,因为
ResourcePlugin.Workspace
未初始化。要初始化它,必须调用
ResourcePlugin.start
BundleContext
。。。我遗漏了什么吗?或者你能提供一个如何做到这一点的简短例子吗?那太好了。你不需要创建具体的实例,而是从ResourcesPlugin提供给你的工作区获取它们。这些实现是内部的,所以暂时忽略它们;您不会自己创建实例。所有相关的方法都返回带有公共接口的对象,这就足够将它们链接在一起并将您带到您想要去的地方。因此,对于
JavaCore
需要的
i项目
,请从ResourcesPlugin提供给您的
IWorkspace
中获取它。是的,您错过了我说过的必须在Eclipse应用程序中运行才能工作的部分。