문제

2 개의 항아리 사이의 이진 호환성을 확인하고 싶습니다.

이것의 제안을 따릅니다 대답 나는 사용했다 Jboss Tattletale 그러나 누락 된 수업 만 찾을 수 있습니다.

누락 된 방법이 있는지 어떻게 찾을 수 있습니까? 전혀 가능합니까?

예를 들어

"의존 -"클래스 Foo는 바에 의존합니다 (다른 많은 중산층 근로자와 마찬가지로)

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

}

이제 상상해보십시오 낡은 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);
    }
}

누락 된 방법을 실행하지 않고 얻는 방법을 식별하는 방법이 있습니까? NoSuchMethodError?


부인 성명: 이것은 내 자신의 주요 재구성입니다 관련 질문, 불가능합니다. Rephrasing이 현재 2 답변을 주제와 관련이없는 것으로 만들기 때문에 새로운 질문을 선택했습니다.

도움이 되었습니까?

해결책

JAPI Compliance-Checker - Java 라이브러리의 후진 API/ABI 호환성 검사기 :

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

enter image description here

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

다른 팁

Clirr - 이진 및 소스 호환성에 대한 Java 라이브러리를 확인하십시오.

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

Revapi 일을 할 수 있습니다. 그것을 Maven 빌드에 통합하는 것은 쉽습니다. 이는 분명히 그렇지는 않지만 다른 사람들에게는 관심이있을 수 있습니다.

또한 독립형 모드를 사용하여 임의의 항아리 세트를 확인할 수도 있습니다.

JapicMP 이진 호환성을 확인하기위한 또 다른 도구입니다. 독립형 명령 줄 도구 또는 Maven 플러그인으로 제공됩니다.

이름의 도구가 있습니다 동물 스니퍼 이를 통해 API의 서명을 추출 할 수 있습니다. 그런 다음 API 사용자가 서명을 고수하는지 정적으로 확인할 수 있으며 API의 도구가 모든 것을 구현했는지 정적으로 확인할 수 있습니다. 나는 이것이 당신의 문제를 멋지게 해결할 것이라고 생각합니다.

Codehaus Maven 저장소에서 Animal Sniffer 용 Jar를 다운로드 할 수 있습니다.http://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer/

JAR을 비교하기위한 특정 클래스 또는 일반 도구를 확인하려면 A가 필요합니까? 1 클래스 인 경우 사용자 정의 클래스 로더에 클래스를로드하고 반사를 사용하여 메소드 서명을 확인하십시오. 많은 항아리/클래스에 필요하면 너무 많은 일이 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top