使用Apache BCEL的CKJM分析工具找不到.class文件

问题描述

我正在使用CKJM工具分析一个Java项目,该工具可以查看编译(.class)文件。我不断收到源自apache bcel的“找不到类”错误。我通过在其他事物中显式指定类路径来尝试其他事情,但是仍然遇到相同的问题。任何帮助将不胜感激。

这是Ant build.xml文件中的相关代码

<!-- The target responsible for the static alalysis of a desired project -->
<target name="ckjm" depends="init">
  <taskdef name="ckjm" classname="gr.spinellis.ckjm.ant.CkjmTask">
    <classpath>
      <pathelement location="ckjm_ext.jar"/>
    </classpath>
  </taskdef>
  <!-- Apply ckjm to the compiled files of the desired project -->
  <ckjm outputfile="${dest.dir}/ckjmResults.xml" format="xml" classdir="com">
      <include name="**/*.class"/>
  </ckjm>
</target>

这是我得到的错误

/Users/guribhangu/development/research/qatch/Offline_Tools/build.xml:106: java.lang.IllegalArgumentException: java.lang.classNotFoundException: Exception while looking for class com.google.common.base.Optional: java.io.IOException: Couldn't find: com/google/common/base/Optional.class
at gr.spinellis.ckjm.ClassVisitor.visitJavaClass(ClassVisitor.java:110)
at gr.spinellis.ckjm.ClassVisitor.start(ClassVisitor.java:92)
at gr.spinellis.ckjm.MetricsFilter.processClass(MetricsFilter.java:169)
at gr.spinellis.ckjm.MetricsFilter.processClass(MetricsFilter.java:159)
at gr.spinellis.ckjm.MetricsFilter.runMetricsInternal(MetricsFilter.java:197)
at gr.spinellis.ckjm.MetricsFilter.runMetrics(MetricsFilter.java:80)
at gr.spinellis.ckjm.ant.CkjmTask.execute(CkjmTask.java:150)
at org.apache.tools.ant.UnkNownElement.execute(UnkNownElement.java:292)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.apache.tools.ant.dispatch.dispatchUtils.execute(dispatchUtils.java:99)
at org.apache.tools.ant.Task.perform(Task.java:350)
at org.apache.tools.ant.Target.execute(Target.java:449)
at org.apache.tools.ant.Target.performTasks(Target.java:470)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1401)
at org.apache.tools.ant.Project.executeTarget(Project.java:1374)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1264)
at org.apache.tools.ant.Main.runBuild(Main.java:827)
at org.apache.tools.ant.Main.startAnt(Main.java:223)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:284)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:101)
Caused by: java.lang.classNotFoundException: Exception while looking for class com.google.common.base.Optional: java.io.IOException: Couldn't find: com/google/common/base/Optional.class
at org.apache.bcel.util.AbstractClasspathRepository.loadClass(AbstractClasspathRepository.java:77)
at org.apache.bcel.util.MemorySensitiveClasspathRepository.loadClass(MemorySensitiveClasspathRepository.java:33)
at org.apache.bcel.classfile.JavaClass.getSuperClass(JavaClass.java:821)
at org.apache.bcel.classfile.JavaClass.getSuperClasses(JavaClass.java:833)
at gr.spinellis.ckjm.ClassVisitor.visitJavaClass(ClassVisitor.java:108)
... 23 more
Caused by: java.io.IOException: Couldn't find: com/google/common/base/Optional.class
at org.apache.bcel.util.Classpath.getClassFile(Classpath.java:666)
at org.apache.bcel.util.Classpath.getInputStream(Classpath.java:710)
at org.apache.bcel.util.Classpath.getInputStream(Classpath.java:688)
at org.apache.bcel.util.AbstractClasspathRepository.loadClass(AbstractClasspathRepository.java:75)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)