如何解决使用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 举报,一经查实,本站将立刻删除。