IvyDE は Eclipse 用の拡張機能で、Apache Ivy で管理している依存ライブラリを Eclipse のクラスパス管理に統合します。Ivy 管理下の JAR ファイルへのパスを .classpath
に直接記載していると、ライブラリの更新等でファイル名が変わった際にエラーが発生します。しかし、IvyDE でクラスパスコンテナを作成している場合、自動的にクラスパスの情報が変更されるためエラーになりません。
一方、Extension Pack for Java は VSCode 用の拡張機能パックです。
VSCode 上で Java コードに対する IntelliSense、デバッグ、テストが実行できるほか、プロジェクトの管理(Maven / Gradle / アンマネージド)も可能です。1
IvyDE でライブラリを追加したプロジェクトを VSCode で開くと、それらのライブラリを認識せずエラーが表示されます。IvyDE は Eclipse 用の拡張機能ですから、当然といえば当然です。
IvyDE で追加したライブラリが Extension Pack for Java に認識されない理由
.classpath
ファイルを確認するとわかります。java.configuration.checkProjectSettingsExclusions
が true
の場合(デフォルト)、左ペインでは見つからないため、エクスプローラから開いてください。以下のような記載があるはずです:
<classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?project=ivyde-test&ivyXmlPath=ivy.xml&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" です
]
Referenced Libraries
右隣の + マークからは JAR を個別に追加できます。しかし、 settings.json
では glob パターンが使えますので、 ivy:retrieve
の pattern
とすり合わせることで IvyDE の使い勝手に寄せられます。
.project
があるとマネージドであると認識されてしまいますが、一時的に削除やリネームすればアンマネージド扱いになります。引き続きエラーが表示される場合は、Clean Workspace
とファイルの開きなおしで解決する場合があります。
参考リンク
- サンプルプロジェクト
- How to add referenced library JAR files using relative path for eclipse Java project in vscode
- Add java.project.referencedLibraries setting #1196
-
実体としてはProject Manager for Javaがプロジェクトの管理を担当しています。 ↩