Я хочу проверить двоичную совместимость между двумя JAR.
Следуя рекомендациям в этом ответе, я использовал jboss tattletale, но он может найти только отсутствующие классы.
Как я могу найти, если отсутствуют методы? Возможно ли вообще?
например.
"Depends - on" class 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
}
}
Класс времени компиляции
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);
}
}
Теперь представьте себе, что старая панель бара заменяет скомпилированную шкалу времени:
Класс времени выполнения
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);
}
}
Есть ли способ идентифицировать отсутствующий метод без его запуска и получения NoSuchMethodError
?
Отказ от ответственности. Это серьезная перефразировка моего собственного связанного вопроса, который неуязвим. Я выбрал задание нового вопроса, потому что перефразировка сделает текущие 2 ответа как совершенно не связанные с темой.