有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

给定java类名和一对jar文件,在每个jar文件中查找父类名

我正在编写一个工具,用来确定系统升级时哪些类发生了变化。我的意见是: 1-与预升级系统一起使用的jar文件 2-升级后系统使用的jar文件 3-我关心的课程及其目的列表 资产初始化包1。我的资产。班 资产终止包1。赞成。班 等等

我想做的是能够加载新系统附带的jar和旧系统附带的jar,并确定给定类在更改后是否具有与更改前相同的父类。i、 e.如果在新系统资产初始化中 1-仍然是包装1。我的资产。阶级和 2-仍然是package0的扩展。通用软件集。阶级

我假设我可以使用反射,但我不确定如何确定每个jar中的给定类父类是什么,以查看它是否发生了更改

我的工具不一定直接(在运行时)使用JAR——事实上,除了作为系统更改分析的输入之外,不应该真正使用JAR


共 (2) 个答案

  1. # 1 楼答案

    虽然除了它的(单亲)父类之外,类可能还有很多重要的更改,但如果您真的只需要这些更改,我就不必为代码费心了,我只需要将两个JAR都放在一个带有JDK的系统上,并执行以下操作:

    javap -classpath jar1 aclassname |grep extends 
    javap -classpath jar2 aclassname |grep extends
    # or substitute findstr on unimproved Windows 
    # repeat for multiple classes as desired
    

    如果你想在“公共API”中寻找任何变化,完整的javap输出是一个好的开始

  2. # 2 楼答案

    1. 每个JAR文件需要两个URLClassLoaders,一个
    2. 处理你的类列表,并通过两个类加载器依次加载每个类
    3. 不要试图投下他们,他们只是在这个阶段
    4. 对每个类调用Class.getSuperClass(),然后对每个父类调用getName()
    5. 比较一下