2016-06-12 5 views
3

私はEclipseのJavaプロジェクトを持っており、プロジェクトのソースディレクトリ、クラスパスなどの情報を取得したいと考えています。現在の実装では.projectファイルを解析しています。しかし、.projectファイルの構造を記述した公式の文書が見つかりませんでしたので、私はこのアプローチの堅牢性に懸念があります。ヘッドレスモードでJDTを使用してEclipse Javaプロジェクトを読み込むことはできますか?

より便利で堅牢な方法は、プロジェクトをロードしてIJavaProjectオブジェクトから関連情報を取得するためにJDT(ヘッドレス)を使用することです。 JDTの開発者向けガイドは言うものの

JDTコアパッケージは、JavaモデルオブジェクトとヘッドレスのJava IDEインフラストラクチャにアクセスできます。私は開いて見つけることができます

すべての例では、既存のJavaプロジェクトはworkspace内のプロジェクトからIJavaProjectオブジェクトを取得したり、IProjectオブジェクトを使用します。しかし、workspaceにプロジェクトを追加する方法、または.projectファイルのパスからIProject/IJavaProjectを構築する方法を見つけることができませんでした。

誰でもお手伝いできますか?

答えて

0

Eclipseプロジェクト内で作業できるプロジェクトについては、http://www.ant4eclipse.org/を参照してください。

私はそれを数年前から使用していましたが、これは長期的な使用やスクリプト作成には脆弱であることがわかりました。私は内部Eclipseのものに頼らないことをお勧めします。彼らは壊れます!通常は、ミックスをリリースします。

代わりにMavenに移行することをお勧めします。これはもう少し作業ですが、MavenのインフラストラクチャやAPI全体を使って作業を行うことができます。ここで達成したいことは、すでにMavenプラグインを使用している可能性があります。

+0

感謝。しかし、ant4eclipseは、Javaプロジェクトで直接使用できるAPIをエクスポートしていないようです。 EclipseプロジェクトをMavenプロジェクトまたはGradleプロジェクトに変換するための対応する設定とツールを読み込むライブラリがすでに存在する場合、MavenまたはGradleに切り替えることは可能です。 – MYP

1

はい、すべてクリアで安定したAPIで実行できます。org.eclipse.jdt.coreは、プラグイン、ちょうど(あなたがIWorkspaceインスタンスを取得する場所です)org.eclipse.core.resourcesのようで、彼らは両方内それはあなたがあなたのを書く方法かどうレスすることができのEclipseランタイムを、実行していることを期待しますEclipseアプリケーション。 JDTは、.classpathファイルを使用して、ソース、ライブラリ、ビルド出力の場所と、使用するライブラリへの抽象的な参照を記録します。.projectファイルは、Java、PHP、Web、someなどの一般的なプロジェクトの種類を記録します。それらの組み合わせ、または他のビルダーの情報を少し詳しく説明します。

あなた自身の頭の中にないEclipseアプリケーションにするか、エンド・ゴール機能をパッケージ化してください。

https://wiki.eclipse.org/FAQ_What_is_an_Eclipse_application%3F https://wiki.eclipse.org/FAQ_What_are_extensions_and_extension_points%3F http://help.eclipse.org/mars/topic/org.eclipse.platform.doc.isv/reference/extension-points/org_eclipse_core_runtime_applications.html?cp=2_1_1_27

http://help.eclipse.org/mars/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/ResourcesPlugin.html#getWorkspace-- http://help.eclipse.org/mars/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/JavaCore.html#getJavaCore-- http://help.eclipse.org/mars/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/IJavaProject.html#getResolvedClasspath-boolean-

+0

'Workspace'と' JavaCore'を得るのは便利ですが、私の問題は 'getResolvedClasspath'を呼び出すために必要な' IJavaProject'オブジェクトの取得/構築です。 – MYP

+0

これらの2つのクラスをよく見てください。 1つはIProjectを与え、もう1つはそれを使って対応するIJavaProjectを与えることができます。 – nitind

+0

'JavaCore.create(IProject)'メソッドを意味しますか?これは 'IProject'引数を必要とし、' IProject'の唯一の実装者、すなわち 'Project'は' protected'コンストラクタを持っています。 'WorkspaceRoot.getProject(String)'は 'Project'を返しますが、' WorkspaceRoot'を取得するには 'Workspace'が必要です。ヘッドレスの設定では、 'ResourcePlugin.workspace'が初期化されていないため、' ResourcePlugin.getWorkspace() 'を呼び出すと直接' java.lang.IllegalStateException:Workspace is closed'例外がトリガーされます。それを初期化するには、 'BundleContext'を使って' ResourcePlugin.start'を呼び出さなければなりません。 ...私は何かが恋しい? – MYP

関連する問題