Era*_*dan 18 java static-analysis bytecode jar binary-compatibility
我想验证2个JAR之间的二进制兼容性.
根据这个答案中的建议,我使用jboss tattletale,但它只能找到缺少的类.
如何找到缺少的方法?有可能吗?
例如
"取决于 - " Foo 课程取决于Bar(像许多其他中产阶级工人一样)
import org.overlyusedclassnames.Bar
public class Foo{
public void someMethod(){
Bar tender = new Bar();
tender.getJohnnyRedLabel();
tender.getJohnnyBlueLabel(); //this method is new in the Bar class
}
}
Run Code Online (Sandbox Code Playgroud)
"编译时间"课程
package org.overlyusedclassnames;
/**
* @Since 1992
* Changes: added blue and gold Johnny Walker labels
*/
public class Bar {
public Drink getJohnnyRedLabel(){
return new JohnyWalkerFactory.get(RedLabel.class);
}
public Drink getJohnnyBlackLabel(){
return new JohnyWalkerFactory.get(BlackLabel.class);
}
public Drink getJohnnyGoldLabel(){
return new JohnyWalkerFactory.get(GoldLabel.class);
}
public Drink getJohnnyBlueLabel(){
return new JohnyWalkerFactory.get(BlueLabel.class);
}
}
Run Code Online (Sandbox Code Playgroud)
现在假设一个旧的 Bar jar正在替换编译的时间栏:
"运行时间"类
package org.overlyusedclassnames;
/**
* @Since 1909
* Changes: added red and black Johnny Walker labels
*/
public class Bar {
public Drink getJohnnyRedLabel(){
return new JohnyWalkerFactory.get(RedLabel.class);
}
public Drink getJohnnyBlackLabel(){
return new JohnyWalkerFactory.get(BlackLabel.class);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法识别丢失的方法而不运行它并得到一个NoSuchMethodError?
免责声明:这是对我自己的相关问题的一个重要修改,这是不可取消的.我之所以选择提出一个新问题是因为改述将使当前的2个答案与主题完全无关.
lin*_*ild 16
japi-compliance-checker - Java库的后向API/ABI兼容性检查器:
japi-compliance-checker -lib NAME -old OLD.jar -new NEW.jar
Run Code Online (Sandbox Code Playgroud)
sigtest - Oracle的SigTest签名测试和API一致性工具
japitools - 测试Java API之间的兼容性
japi-checker - 一个在二进制级别工作的java API向后兼容性检查器
revapi - API分析和变更跟踪工具
或手动使用javap反编译器:
javap OLD.class > OLD.txt javap NEW.class > NEW.txt diff -rNau OLD.txt NEW.txt > CHANGES.txt
| 归档时间: |
|
| 查看次数: |
4535 次 |
| 最近记录: |