Pregunta

Quiero verificar la compatibilidad binaria entre 2 Frascos.

Siguiendo las sugerencias en este respuesta He utilizado jboss chismosos pero se puede encontrar sólo faltan clases.

¿Cómo puedo saber si hay falta de métodos?Es posible que en todo?

E. g.

"Depende de" la clase Foo depende de Barra (como muchos otros de la clase media de los trabajadores)

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

"Tiempo de compilación" de la clase

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

}

Ahora imagine un viejo Barra de tarro es accedently sustitución del compilado barra de tiempo:

"Tiempo de ejecución" de la clase

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

Es allí una manera de identificar el método que falta sin correr y obtener un NoSuchMethodError?


Descargo de responsabilidad:Esta es una gran frase de mi propia una pregunta relacionada con la, que es imborrable.Elegí pidiendo una nueva pregunta, porque la frase se representará la actual 2 respuestas muy relacionados con el tema.

¿Fue útil?

Solución

Japi-cumplimiento ortográfico - API atrás / ABI comprobador de compatibilidad para una biblioteca de Java :

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

 introducir descripción de la imagen aquí

sigtest - de Oracle SigTest pruebas de la firma y una herramienta de conformidad API

japitools - comprueba la compatibilidad entre las API de Java

Japi ortográfico - un comprobador de compatibilidad hacia atrás de la API de Java que funciona a nivel binario

revapi - análisis de activos y de cambiar la herramienta de seguimiento

o manualmente utilizando decompilador javap:

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

Otros consejos

Clirr - cheques bibliotecas Java para la compatibilidad binaria y la fuente con versiones anteriores:

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

Revapi puede hacer el trabajo, también. Es fácil de incorporar en experto construye, que no es su caso, obviamente, pero podría ser de interés para otros.

También puede comprobar conjuntos arbitrarios de frascos utilizando su modo autónomo.

japicmp es otra herramienta para comprobar la compatibilidad binaria. Está disponible como herramienta de línea de comandos independiente o como plugin de Maven.

Se trata de una herramienta con el nombre de Animal Sniffer que le permite extraer una firma para una API.A continuación, puede estáticamente verificar que los usuarios de la API se adhieren a la firma, y puede estáticamente verificar que los ejecutores de la API de todo lo implementado.Creo que esto podría resolver el problema muy bien.

Puede descargar el frasco para Animales Sniffer de la codehaus repositorio de maven:http://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer/

¿Necesita un cheque a una clase específica o una herramienta genérica para comparar frasco de? Si es para la clase 1, basta con cargar la clase en un cargador de clase personalizada, comprobar la firma métodos mediante el uso de la reflexión y eso es todo. Si lo necesita para muchos de JAR / Clases esto será demasiado trabajo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top