前提・実現したいこと
下記のプロジェクトの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
回答1件
あなたの回答
tips
プレビュー