2016-05-28 1 views
1

私はライブラリのLombok 1.16 jarファイル(eclipseでビルドパスを設定中)を与えている間に、クラスパスにLombok 1.12 jarファイルを追加しました。 Eclipseは、@Builderのようなロンボクの一部の注釈を認識できませんでした(コンパイラエラーを出していました)。 (また@Builderはバージョン1.12にメインLombokパッケージに含まれていた)クラスパス内の異なるjarファイルとEclipse内のbuildpath

後、私は修正もクラスパスにLombok 1.16 jarファイルを与えました。 @Builder注釈は今度はeclipseによって認識されます。すべてがうまくいきます。

これは、vmのクラスパスがビルドパスと比較され、バイナリファイル(lombok.jar)がクラスパスとbuildpathの両方で同じかどうかがチェックされます。私のアサーションは正しいですか?私が間違ってこれを解釈しているなら、私はPlsを修正します。

+0

eclipseでは、エージェントとしてインストールされたjarがコード生成に使用されます。プロジェクト内のjarを使用して、プロジェクト内でアノテーションにアクセスできるようにします。エージェントは異なるクラスパスを使用します。 –

+0

@RoelSpilkerコード生成によって、jvmはコンパイラがそこからピックアップできるように、特定のロンボクのアノテーションのために1つの場所に命令を設定し続けることを意味しますか? – Ashley

+0

それは正しいです。 –

答えて

1

ビルドパスは、クラスパスのスーパーセットのようなもので、クラスパス、ソースコードパス、プロジェクトに依存するすべてのリソースを保持します。 2つの異なるバージョンのjarがある場合、JVMはビルドパスの最初にくるjarからクラスをロードします。これは編集(ビルドパス - >ビルドパスの設定 - >エクスポートの順序)によって管理できます。必要なクラスが最初のバージョンで利用できない場合、2番目のバージョンのjarファイルをチェックします。それが見つからない場合、コンパイルエラーがスローされます

+0

お返事ありがとうございます。私が確信できるようにあなたが与えた説明のためのリンクを私に提供することはできますか? – Ashley

+0

http://stackoverflow.com/questions/3529459/what-is-the-difference-between-class-path-and-build-path –

+0

http://stackoverflow.com/questions/6105124/java-classpath-classloading複数のバージョンの同じjarプロジェクト –

0

あなたが参照したいと思っているものは、それを最優先にすることによって優先順位を与えます。最後のタブをビルドするか、参照したくない下位バージョンをデリンクすることができます。

+0

私はbuildpathに2つの異なるバージョンを与えていません。私はビルドパスとクラスパス用の異なるバージョンのjarを提供しました。 Eclipseにコンパイラのエラーが表示されます。ビルドパスには正しいバージョンのみが含まれていますが。間違ったバージョンを含むクラスパスです。 @スミティの答えは私の質問には行かない。 jvmはこの矛盾をどのように解決しますか? – Ashley

関連する問題