Domanda

Voglio verificare la compatibilità binaria tra 2 vasetti.

Seguendo i suggerimenti in questo rispondere ho usato JBoss tattletale ma può trovare le classi solo mancanti.

Come faccio a sapere se ci sono metodi mancanti? E 'possibile a tutti?

per es.

"Dipende - sulla" class Foo dipende Bar (come molti altri lavoratori della classe media)

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

"Tempo di compilazione" 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);
    }

}

Ora immaginate un vecchia vaso Bar si accedently sostituendo la barra del tempo compilato:

class "Runtime tempo"

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

C'è un modo per identificare il metodo mancante senza correre e ottenere un NoSuchMethodError?


responsabilità : Questo è un importante riformulazione della mia domanda relativa , che è incancellabile. Ho scelto di fare una nuova domanda, perché la riformulazione renderà gli attuali 2 risposte come del tutto estranei al tema.

È stato utile?

Soluzione

JAPI-compliance-checker - API indietro / ABI verifica della compatibilità di una libreria Java :

japi-compliance-checker -lib NAME -old OLD.jar -new NEW.jar

 entrare descrizione dell

sigtest - Oracle SigTest test firma e strumento di conformità API

japitools - test per la compatibilità tra API Java

JAPI-checker - Un'API Java all'indietro checker compatibilità che opera a livello binario

revapi - analisi API e cambiare strumento di monitoraggio

o manualmente utilizzando javap decompilatore:

javap OLD.class > OLD.txt
javap NEW.class > NEW.txt
diff -rNau OLD.txt NEW.txt > CHANGES.txt

Altri suggerimenti

Clirr - assegni librerie Java per binaria e sorgente di compatibilità con le versioni precedenti:

java -jar clirr-core-0.6-uber.jar -o OLD.jar -n NEW.jar

Revapi può fare il lavoro, anche. E 'facile da integrare in Maven costruisce, che non è il vostro caso, ovviamente, ma potrebbe essere di interesse per gli altri.

Si può anche verificare insiemi arbitrari di vasi utilizzando la sua modalità autonoma.

japicmp è un altro strumento per verificare la compatibilità binaria. È disponibile come stand-alone strumento da riga di comando o come plug-in Maven.

Non è uno strumento con il nome di animali Sniffer che permette di estrarre un firma per un'API. Poi si può verificare staticamente che gli utenti delle API attaccano alla firma, ed è in grado di verificare in modo statico che implementatori delle API hanno tutto implementato. Penso che questo risolverebbe il problema bene.

È possibile scaricare il vaso per Sniffer Animal dal repository Maven Codehaus: http://repo1.maven.org/maven2/org/codehaus / Mojo / animale-sniffer /

Avete bisogno di un controllo ad una classe specifica o di uno strumento generico per il confronto vaso di? Se è per 1 classe, è sufficiente caricare la classe in una classe personalizzata caricatore, controllare la firma metodi utilizzando la riflessione e il gioco è fatto. Se ne avete bisogno per molti JAR di / Classi questo sarà troppo lavoro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top