1
1

More than 1 year has passed since last update.

IvyDE で追加したライブラリが VSCode の Project Manager for Java に認識されない

Last updated at Posted at 2022-02-13

IvyDE は Eclipse 用の拡張機能で、Apache Ivy で管理している依存ライブラリを Eclipse のクラスパス管理に統合します。Ivy 管理下の JAR ファイルへのパスを .classpath に直接記載していると、ライブラリの更新等でファイル名が変わった際にエラーが発生します。しかし、IvyDE でクラスパスコンテナを作成している場合、自動的にクラスパスの情報が変更されるためエラーになりません。

ivyde.png

一方、Extension Pack for Java は VSCode 用の拡張機能パックです。
VSCode 上で Java コードに対する IntelliSense、デバッグ、テストが実行できるほか、プロジェクトの管理(Maven / Gradle / アンマネージド)も可能です。1

vscode-java-dependency 2

IvyDE でライブラリを追加したプロジェクトを VSCode で開くと、それらのライブラリを認識せずエラーが表示されます。IvyDE は Eclipse 用の拡張機能ですから、当然といえば当然です。

IvyDE で追加したライブラリが Extension Pack for Java に認識されない理由

.classpath ファイルを確認するとわかります。java.configuration.checkProjectSettingsExclusionstrue の場合(デフォルト)、左ペインでは見つからないため、エクスプローラから開いてください。以下のような記載があるはずです:

<classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?project=ivyde-test&amp;ivyXmlPath=ivy.xml&amp;confs=*"/>

通常の JAR ファイルをクラスパスに追加するには kind="lib" として記載しますが、IvyDE で追加した依存は kind="con" 、すなわちクラスパスコンテナとして記載されています。いまのところ、Extension Pack for Java は IvyDE クラスパスコンテナ内の JAR を参照してくれないようです。

対処法

シンプルに .classpath を編集する方法もありますが、あまり便利ではないのでお勧めできません。せっかくなので、Extension Pack for Java の機能を活用しましょう。

Extension Pack for Java は、現在開いているプロジェクトがアンマネージドであると認識した場合、settings.json でクラスパスを通すことができます:

"java.project.referencedLibraries": [
    "ivy/**/*.jar", // デフォルト値は "lib/**/*.jar" です
]

ivyde2.png

Referenced Libraries 右隣の + マークからは JAR を個別に追加できます。しかし、 settings.json では glob パターンが使えますので、 ivy:retrievepattern とすり合わせることで IvyDE の使い勝手に寄せられます。

.project があるとマネージドであると認識されてしまいますが、一時的に削除やリネームすればアンマネージド扱いになります。引き続きエラーが表示される場合は、Clean Workspace とファイルの開きなおしで解決する場合があります。

参考リンク

  1. 実体としてはProject Manager for Javaがプロジェクトの管理を担当しています。

  2. https://github.com/Microsoft/vscode-java-dependency

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1