質問するログイン新規登録

Q&A

解決済

1回答

1939閲覧

java.lang.NoClassDefFoundErrorを解決するために、足りてないクラスパスをどこで定義し直せばよいのか

thyme0113

総合スコア10

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2022/07/02 10:48

編集2022/07/02 14:44

0

1

前提・実現したいこと
下記のプロジェクトのsrc/main/java/test/GenerateTraininigData.javaを実行して出たエラー(java.lang.NoClassDefFoundError: jdk/nashorn/internal/runtime/ParserException)を解決したい。
https://github.com/shiyy123/FCDetector

発生している問題・エラーメッセージ
/home/"ユーザ名"/FCDetectorでmvn compileして後に下記のコマンドを実行すると、下記のようなエラーが出た。

java

1java -cp target/classes test.GenerateTrainingData /home/"ユーザ名"/data /home/"ユーザ名"/FCDetector /home/"ユーザ名"/data/src 2 3#エラー内容 4Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.io.File.getAbsolutePath()" because "cpgFile" is null 5at joern.CPG.getASTFileByCPGFile(CPG.java:212) 6at test.GenerateTrainingData.main(GenerateTrainingData.java:76)

src/main/java/test/GenerateTraininigData.javaの72行目

java

1File cpgFile = cpg.getCPGFileBySourceFolder(sourceFile, cpgPath);

が原因だと思い、上記のメソッドgetCPGFileBySourceFolder()を見てみると、

/home/"ユーザ名"/FCDetector/joern/joern-cli/joern-parse --out /home/abe/data/cpg/fibonacci/accept_recursive_code/cpg.bin.zip

というコマンドが実行されていることがわかりました。
原因がここだと仮定して、コマンドラインでこのコマンドを実行すると,

java

1Exception in thread "main" java.lang.NoClassDefFoundError: jdk/nashorn/internal/runtime/ParserException 2at io.shiftleft.fuzzyc2cpg.FuzzyC2Cpg.createCpgForCompilationUnit(FuzzyC2Cpg.scala:158) 3at io.shiftleft.fuzzyc2cpg.FuzzyC2Cpg.$anonfun$runAndOutput$1(FuzzyC2Cpg.scala:83) 4at io.shiftleft.fuzzyc2cpg.FuzzyC2Cpg.$anonfun$runAndOutput$1$adapted(FuzzyC2Cpg.scala:83) 5at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:576) 6at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:574) 7at scala.collection.parallel.immutable.ParHashSet$ParHashSetIterator.foreach(ParHashSet.scala:79) 8at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:946) 9at scala.collection.parallel.Task.$anonfun$tryLeaf$1(Tasks.scala:52) 10at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18) 11at scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:67) 12at scala.collection.parallel.Task.tryLeaf(Tasks.scala:55) 13at scala.collection.parallel.Task.tryLeaf$(Tasks.scala:49) 14at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:943) 15at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.internal(Tasks.scala:159) 16at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.internal$(Tasks.scala:156) 17at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.internal(Tasks.scala:303) 18at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute(Tasks.scala:149) 19at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute$(Tasks.scala:148) 20at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:303) 21at java.base/java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:194) 22at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) 23at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) 24at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) 25at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) 26at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) 27Suppressed: java.lang.NoClassDefFoundError: jdk/nashorn/internal/runtime/ParserException 28at io.shiftleft.fuzzyc2cpg.FuzzyC2Cpg.createCpgForCompilationUnit(FuzzyC2Cpg.scala:158) 29at io.shiftleft.fuzzyc2cpg.FuzzyC2Cpg.$anonfun$runAndOutput$1(FuzzyC2Cpg.scala:83) 30at io.shiftleft.fuzzyc2cpg.FuzzyC2Cpg.$anonfun$runAndOutput$1$adapted(FuzzyC2Cpg.scala:83) 31at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:576) 32at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:574) 33at scala.collection.parallel.immutable.ParHashSet$ParHashSetIterator.foreach(ParHashSet.scala:79) 34at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:946) 35at scala.collection.parallel.Task.$anonfun$tryLeaf$1(Tasks.scala:52) 36at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18) 37at scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:67) 38at scala.collection.parallel.Task.tryLeaf(Tasks.scala:55) 39at scala.collection.parallel.Task.tryLeaf$(Tasks.scala:49) 40at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:943) 41at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute(Tasks.scala:152) 42... 8 more 43Caused by: java.lang.ClassNotFoundException: jdk.nashorn.internal.runtime.ParserException 44at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) 45at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) 46at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) 47... 22 more 48Caused by: java.lang.ClassNotFoundException: jdk.nashorn.internal.runtime.ParserException 49at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) 50at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) 51at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) 52... 25 more

該当のソースコード
https://github.com/shiyy123/FCDetector
使用するdataフォルダ:https://github.com/Thyme0113/data/tree/main/data

自分で調べたことや試したこと
java.lang.NoClassDefFoundErrorについて調べてみて、ファイル実行時にクラスパスが見つからないことが原因だということまで分かった。
しかしどこにクラスパスを定義してあげればいいという記事は見当たらなかったため、手詰まりとなってしまった。
説明がわかりやすい記事を知っていましたらそれも教えていただけると、とても嬉しいです。

参考にしたサイト
https://www.binarydevelop.com/article/javalangnoclassdeffounderror-27087
https://qiita.com/ponsuke0531/items/a9d661bbc86e84d3aaf2
https://qiita.com/Am_nine/items/4bb589371806f6f0fb79

使っているツールのバージョンなど補足情報
os:Ubuntu 18.04.6 LTS
maven: apache-maven-3.8.6
java: jdk-17.0.3.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

回答1

0

自己解決

今回の場合はjdkのバージョンを8まで下げたら、nashronは使えました。
バージョンによっては使えないみたいですね。

他にも外部ライブラリ(log4j, commons.io, org.json)でjava.lang.NoClassDefFoundErrorがでたがjdk/jre/lib/extにjarファイルを置いたら問題なく動いた。
下記サイトを参考にしました。
https://www.mlab.im.dendai.ac.jp/~yamada/java/ext/

投稿2022/07/10 01:05

thyme0113

総合スコア10

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.25%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問