前提
JavaでJacksonを利用してjsonをパースさせる動作確認をしようとしています。
Javaの開発環境としては、VSCodeにJava Extension Packをインストールし、
Jacksonのjarファイル(annotations, core, databind)をダウンロードして参照に追加※しました。
※
settings.jsonでjava.project.referencedLibrariesの示すフォルダにjarフォルダを配置、
これによりJavaソースコード上の該当jarを使用している箇所でビルドエラーが解消するため
ビルド時の参照については正しく行われているものと考えています。
しかし、デバッグ実行するとjarに定義されたクラスの生成において
NoClassDefFoundError例外となってしまいます。
VSCodeでJavaを実行する際にjarファイルへのクラスパスが通っていないのでは…と考え、
その解決策を探しているものの現状、見つけられていない状態にあります。
VSCodeで外部参照のjarファイルのクラス生成が
実行時にNoClassDefFoundErrorとなるエラーについて、
解決策をご存知であればご教示いただきたく存じます。
追伸
Java、Jacksonのバージョンについては「該当のソースコード」をご参照ください。
発生している問題・エラーメッセージ
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper at App.main(App.java:5) Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 1 more
該当のソースコード
■フォルダ構成 [VSCodeで開いているフォルダ] ├lib │├jackson-annotations-2.13.3.jar │├jackson-core-2.13.3.jar │└jackson-databind-2.13.3.jar └App.java ■App.java import com.fasterxml.jackson.databind.ObjectMapper; public class App { public static void main(String[] args) { var mapper = new ObjectMapper(); // ここ(5行目)でjava.lang.NoClassDefFoundError例外が発生 } } ■settings.json { "java.jdt.ls.java.home": "C:\\Program Files\\Java\\jdk-17.0.4.1", "java.project.referencedLibraries": [ "lib/**/*.jar" ] }
試したこと
・
手動で配置したjarを参照するのではなくmavenプロジェクトとして作成し
pom.xmlにdependencyとしてjacksonの3ファイルを指定する。
・
システム環境変数のJAVA_HOMEとCLASSPATHに
それぞれsettings.jsonで記載した内容を設定する。
・
classファイルが生成されるbinフォルダに
直接jarファイルを配置してみる。
あなたの回答
tips
プレビュー