我有一个jar文件。我想知道JAR文件中的类使用了哪些外部类和方法。任何人都可以建议我使用任何工具吗?
例如 - 如果以下两个类被打包到 Myjar.jar
import java.util.Vector;
class MyJarClass{
public static void main(String args[]){
Vector v = new Vector();
AnotherClass another = new AnotherClass();
v.addElement("one");
another.doSomething();
}
}
class AnotherClass{
void doSomething(){
}
}
当我将JAR提供给工具时 - 该工具应显示java.util.Vector
而Vector.adElements()
来自外部来源( MyJar.jar 中不存在)
忘记提及,我无法访问源代码。
答案 0 :(得分:4)
轻松强>
import com.example.*;
<强>可能的强>
List<com.example.MyType> = new ArrayList<com.example.MyType>();
挑战
Class<?> clazz = Class.forName("com.example.MyType");
不可能的任务
List<String> classes = getClassNamesFromUrl("http://example.com/classes.txt");
for (String className:classes) {
doSomethingWith(Class.forName(className));
}
我支持Jon的建议来查看字节代码(BCEL),但是请注意,通常不可能从jar中读取所有依赖项,因为它们可以是动态的并在库外定义(请参阅:Mission不可能的)。
很难判断是否有工具,请查看java-source.net上的这些目录:
进一步阅读
答案 1 :(得分:3)
您可能需要查看BCEL,这将允许您解析类文件并找出它们使用的内容。我预计这将是一定的努力。
答案 2 :(得分:0)
检查JDepend
图形用户界面显示每个分析的Java包的传入和传出耦合,在熟悉的Java Swing树结构中显示。
答案 3 :(得分:0)
JavaDepend可以帮助您满足这些需求,您可以为任何代码元素获取所有使用的元素,它可以是jar,命名空间,类或方法。
CQL类似于查询代码库的SQL,可让您更灵活地请求有关代码的任何信息。