19 Stimmen

Wie kann man eine fehlende Methode (Binäre Kompatibilität) in einem JAR statisch identifizieren?

Ich möchte die Binärkompatibilität zwischen 2 JARs überprüfen.

Nach den Vorschlägen in diesem Antwort Ich habe Jboss-Plaudertasche aber es kann nur fehlende Klassen finden.

Wie kann ich herausfinden, ob es fehlende Methoden gibt? Ist das überhaupt möglich?

z.B.

"Hängt ab - von" Klasse Foo hängt von Bar ab (wie viele andere Arbeitnehmer der Mittelschicht)

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
    }
}

Klasse "Kompilierzeit"

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);
    }

}

Stellen Sie sich nun eine alt Bar jar ersetzt allmählich die kompilierte Zeitleiste:

Klasse "Laufzeit"

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);
    }
}

Gibt es eine Möglichkeit, die fehlende Methode zu identifizieren, ohne sie auszuführen und eine NoSuchMethodError ?


Haftungsausschluss : Dies ist eine wesentliche Umformulierung meiner eigenen zugehörige Frage die nicht gelöscht werden kann. Ich habe mich dafür entschieden, eine neue Frage zu stellen, weil die Umformulierung die bisherigen 2 Antworten als völlig themenfremd erscheinen lassen wird.

0voto

Benötigen Sie ein Tool zum Überprüfen einer bestimmten Klasse oder ein allgemeines Tool zum Vergleichen von jar's? Wenn es für eine Klasse ist, laden Sie die Klasse einfach in einen benutzerdefinierten Klassenlader, überprüfen Sie die Methodensignatur mithilfe von Reflection und das war's. Wenn Sie es für viele JARs/Klassen benötigen, wird dies zu viel Arbeit sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X