영어프랑스어스페인어

Ad


온웍스 파비콘

clirr - 클라우드에서의 온라인

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터를 통해 OnWorks 무료 호스팅 제공업체에서 clirr을 실행하세요.

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 clirr 명령입니다.

프로그램:

이름


clirr - Java 라이브러리의 소스 및 바이너리 호환성 확인

개요


클리르 -o 올드자르 -n 뉴자르 [옵션]

기술


Clirr는 Java 라이브러리에서 이전 버전과의 바이너리 및 소스 호환성을 확인하는 도구입니다.
릴리스. 기본적으로 두 세트의 jar 파일을 제공하고 Clirr는 다음 목록을 덤프합니다.
공개 API의 변경 사항.

옵션


-a, --모든 범위 표시

개인 및 패키지 클래스 표시

-f, --결과물 파일

출력 파일 이름

-i, --include-pkg

이 패키지와 해당 하위 패키지의 클래스만 포함

-n, --새로운 버전

새 버전의 jar 파일

-ncp, --new-classpath

새 버전에서 참조되는 타사 클래스 경로

-o, --구 버전

이전 버전의 jar 파일

-ocp, --orig-클래스 경로

이전 버전에서 참조되는 타사 클래스 경로

-p, --show-pkg-범위

패키지 범위 클래스 표시

-s, --스타일 [텍스트|xml]

출력 스타일

메시지


clirr가 jar 변경에 대한 ERROR, WARNING 또는 INFO 메시지를 생성하는 경우
비교하면 연관된 메시지 참조 코드가 있습니다. 이 설명서에는
알 수 없는 정보를 포함할 수 있는 해당 메시지의 의미에 대한 설명
간단한 메시지 요약에 적합합니다.

메시지는 ERROR, WARNING, INFO의 세 가지 심각도 수준으로 구분됩니다.

오류는 두 가지 형태로 나타납니다.

링크 타임 실패, 코드가 컴파일되자마자 예외가 발생합니다.
이전 버전의 클래스에 대해 새 버전의 클래스가 로드됩니다.
동일한 클래스로더 계층 구조.

이전 버전에 대해 코드를 컴파일할 때 예외가 발생하는 런타임 오류
클래스 버전이 새 버전의 클래스에서 메서드를 호출하려고 시도하거나 그 반대의 경우도 마찬가지입니다.
반대로

Clirr는 런타임 오류가 발생할 수 있는 경우 "오류"를 보고합니다. 이든
실제로 발생하는 문제는 라이브러리가 호출되는 방식, 즉 변경 사항이 보고되는 방식에 따라 달라질 수 있습니다.
라이브러리 사용 패턴이 작동하는 한 오류는 실제로 작동할 수 있습니다.
실패 상황을 유발하지 않습니다.

링크 또는 런타임 예외가 발생하지 않는 상황에 대해 경고가 발행되지만
발생한 변경으로 인해 애플리케이션이 예기치 않게 작동할 수 있는 경우.

정보 메시지는 사용자에게 새로워진 기능에 대한 정보를 제공합니다.
어떤 방식으로든 이전 버전과의 호환성을 유지하면서 추가되었습니다.

clirr을 사용하여 비공개 또는 패키지 범위의 항목에 대한 변경 사항을 보고할 때 다음은
변경 사항은 항상 INFO 수준 변경으로 보고되며 WARNING 또는 ERROR 수준은 아닙니다. 이것
clirr 사용자는 개발자에게 적합한 수준으로 "변경 보고서"를 생성할 수 있습니다.
이러한 변경 사항 중 일부는 바이너리 비호환성으로 표시되지 않습니다.

비공개 클래스, 메소드 또는 변경사항으로 인해 바이너리 비호환성이 발생해서는 안 됩니다.
액세스가 동일한 클래스 내에서만 발생할 수 있는 필드(즉, 동일한 컴파일
단위).

Clirr는 패키지 범위 항목에 대한 바이너리 비호환성 경고 또는 오류를 보고하지 않습니다.
둘 중 하나는 Java 패키지가 "릴리스 단위"로 의도되었기 때문입니다. 즉,
패키지는 함께 컴파일된 후(호환성 보장) 하나의 단위로 릴리스됩니다. 유일한
패키지 범위 비호환성이 문제가 될 수 있는 시기는 사용자가
라이브러리는 일부 외부 패키지 선언을 사용하여 자체 클래스를 작성합니다.
라이브러리 또는 패키지에서 업데이트된 클래스의 하위 집합(예: 단일 클래스)이 사용되는 경우
이전 라이브러리 릴리스의 특정 클래스를 재정의합니다. 이 둘 모두
상황은 Java 프로그래밍 규칙에 따라 매우 좋지 않은 관행으로 간주됩니다.

다음 섹션에서는 "이전"이라는 용어를 사용하여 클래스, 인터페이스, 메서드를 나타냅니다.
또는 이전/이전/원본/기준 버전을 나타내는 jar 세트의 필드
점검 중인 도서관의 모습입니다. "new"라는 용어는 클래스, 인터페이스,
새로운/현재/최신 버전을 나타내는 jar 세트의 메소드 또는 필드
도서관 점검중.

다음 섹션에서 "유형"이라는 용어는 다음과 같은 항목을 가리키는 데 사용됩니다.
클래스 또는 인터페이스.

1000 - 증가 가시성 of 수업

심각도: 정보

지정된 유형이 두 버전 모두에 존재하지만 선언된 액세스 지정자가
다른 코드에서 액세스할 수 있는 제한을 완화하도록 변경되었습니다.

최상위 유형(즉, 다른 클래스 내에 중첩되지 않은 유형)은
"패키지" 또는 "공용" 접근성. 중첩 유형은 네 가지 중 하나를 취할 수 있습니다.
사용 가능한 접근성 값.

객체가 최상위인지 중첩인지에 관계없이 접근성이 변경됩니다.
왼쪽에서 오른쪽으로 개인->패키지->보호->공개 항상
이전에 해당 유형에 액세스할 수 있었던 모든 코드가 계속해서 해당 유형에 액세스할 수 있도록 보장합니다.
유형. 따라서 이러한 변경은 항상 바이너리이며 소스 코드와 호환됩니다.

"보호됨" 선언은 다음에서 파생된 두 코드에 대한 액세스를 제공합니다.
동일한 패키지 내의 유형 및 코드, 즉 "보호된" 접근성은 또한 의미함을 의미합니다.
패키지 접근성.

1001 - 감소 가시성 of 수업

심각도: 오류

지정된 유형이 두 버전 모두에 존재하지만 선언된 액세스 지정자가
다른 코드에서 액세스할 수 있는 제한을 강화하도록 변경되었습니다.

최상위 유형(즉, 다른 클래스 내에 중첩되지 않은 유형)은
"패키지" 또는 "공용" 접근성. 중첩 유형은 네 가지 중 하나를 취할 수 있습니다.
사용 가능한 접근성 값.

유형이 최상위 유형인지 중첩 유형인지에 관계없이 접근성이 변경됩니다.
왼쪽에서 오른쪽으로 공개->보호->패키지->개인 순서로 인해 발생할 수 있습니다.
이전에 해당 유형에 액세스할 수 있었던 기존 코드는 더 이상 액세스할 수 없습니다.

Java 언어 사양의 섹션 13.4.3에는 다음과 같이 명시되어 있습니다.
기존 바이너리가 유형에 액세스하려고 하면 IllegalAccessError가 발생해야 합니다.
유형 접근성이 오류를 발생시키는 것으로 변경된 경우
컴파일 타임 오류. 그러나 이는 실제로 시행되지는 않는 것으로 보인다.
현재 JVM에서는 최소한입니다. 그럼에도 불구하고 이는 오류이므로 clirr이 보고합니다.
이 변경 사항은 바이너리 호환성 오류입니다.

2000 - 변경 수업 인터페이스

심각도: 오류

지정된 클래스가 새 버전에서는 인터페이스가 되었습니다. 이 변화는
분명한 이유로 항상 바이너리와 소스 코드가 호환되지 않습니다.

2001 - 변경 인터페이스 수업

심각도: 오류

지정된 인터페이스가 새 버전에서는 클래스가 되었습니다. 이 변화는
분명한 이유로 항상 바이너리와 소스 코드가 호환되지 않습니다.

3001 - 제거됨 최후의 변화 수업

심각도: 정보

지정된 클래스가 이전 버전에서 final로 선언되었지만 더 이상 final이 아닙니다.
새 버전에서는.

3002 - 추가 최후의 변화 효과적으로 최후의 수업

심각도: 정보

지정된 클래스는 이전 버전에서는 final로 선언되지 않았지만 이제 선언되었습니다.
결정적인. 일반적으로 이는 기존 파생된 항목이므로 호환되지 않습니다.
이 클래스의 새 버전과 함께 사용하면 클래스가 더 이상 유효하지 않습니다.
그러나 이 경우 이전 클래스 버전에는 공개 또는 보호 생성자가 없었습니다.
따라서 이전 버전의 경우에도 파생 클래스가 존재할 수 없었습니다.
도서관. 따라서 이러한 클래스를 최종으로 변경하면 기존 클래스가 손상될 수 없습니다.
암호.

3003 - 추가 최후의 변화 수업

심각도: 오류

지정된 클래스는 이전 버전에서는 final로 선언되지 않았지만 이제 선언되었습니다.
결정적인. 이 클래스의 하위 클래스로 선언된 기존 클래스
따라서 새 버전의 라이브러리에서는 유효하지 않습니다.

클래스 로더가 로드를 시도할 때 verifyError가 발생합니다.
최종 클래스의 하위 클래스.

클래스 Y는 첫 번째 경우에만 표준 클래스 로더에 의해 로드됩니다.
Y의 인스턴스를 생성하거나 클래스를 직접 참조하려고 시도했습니다.
클래스 Y에 대한 객체입니다. 다른 클래스 X에 클래스 Y가 선언된 멤버로 있거나
매개 변수를 일부 메소드에 추가한 경우 클래스 X를 로드해도 클래스 Y가 로드되지 않습니다.

3004 - 제거됨 추상 변화 수업

심각도: 정보

이 클래스의 이전 버전은 추상 클래스로 선언되었습니다. 새 버전
추상적이지 않으므로 사용자가 클래스의 인스턴스를 만들 수 있습니다.

3005 - 추가 추상 변화 수업

심각도: 오류

이 클래스의 이전 버전은 추상 클래스로 선언되지 않았습니다. 새로운 버전은
추상적인. 이 클래스의 인스턴스를 생성하는 기존 코드는 더 이상
새 버전에서 유효합니다.

4000 - 추가 인터페이스 전에, 세트 of 구현 인터페이스

심각도: 정보

이제 새로운 버전의 유형이 추가 인터페이스를 구현합니다. 이것은 그렇지 않습니다
기존 코드(소스 또는 바이너리)를 무효화하고 완전히
이전 버전과 호환되는 변경.

이 메시지는
지정된 유형; 유형에서 지원하는 인터페이스 세트를 변경하면
이 메시지는 해당 유형의 모든 하위 항목에 대해 보고됩니다.

4001 - 제거됨 인터페이스 전에, 세트 of 구현 인터페이스

심각도: 오류

이 유형의 이전 버전에서는 다음과 같은 인터페이스를 구현했다고 선언했습니다.
새로운 클래스나 인터페이스는 그렇지 않습니다. 명시적 또는 암시적으로 캐스팅하는 기존 코드
현재 누락된 인터페이스에 대한 이 유형의 개체는 더 이상 유효하지 않습니다.

이 메시지는
지정된 유형; 유형에서 지원하는 인터페이스 세트를 변경하면
이 메시지는 해당 유형의 모든 하위 항목에 대해 보고됩니다.

5000 - 추가 수업 전에, 세트 of 슈퍼클래스

심각도: 정보 또는 경고

클래스의 새 버전에는 이전 버전이 상속 계층 구조에 클래스가 있습니다.
버전이 그렇지 않습니다. 직계 부모가 이제 다른 클래스이기 때문이거나
상위 클래스 중 하나가 상속 계층 구조를 변경했기 때문입니다.

지정된 클래스에 java.lang.Throwable이 조상으로 있는 경우 이 변경 사항은 다음과 같습니다.
이 클래스 변경으로 인해 예외 포착이 변경될 수 있으므로 WARNING으로 보고됩니다.
이 클래스를 사용하는 프로그램의 동작.

이 메시지는
지정된 클래스; 조상 클래스의 슈퍼클래스 세트에 대한 변경은
이 메시지가 모든 하위 클래스에 대해 보고되도록 합니다.

5001 - 제거됨 수업 전에, 세트 of 슈퍼클래스

심각도: 오류

이 클래스의 이전 버전에는 상속 계층 구조에 클래스가 있습니다.
새 버전은 직접 상위 클래스가 이제 다른 클래스이기 때문에 그렇지 않습니다.
상위 클래스 중 하나가 상속 계층 구조를 변경했기 때문입니다.

이 유형의 객체를 명시적 또는 암시적으로 현재 유형으로 캐스팅하는 기존 코드
누락된 클래스 유형은 더 이상 유효하지 않습니다.

이 메시지는
지정된 클래스; 조상 클래스의 슈퍼클래스 세트에 대한 변경은
이 메시지가 모든 하위 클래스에 대해 보고되도록 합니다.

또한 이 클래스의 조상에 Throwable이 있는 경우 클래스는
계층 구조 변경으로 인해 예외 포착 동작이 변경될 수도 있습니다.
이 클래스를 사용하는 프로그램.

6000 - 추가

심각도: 정보

새 클래스에는 추가 정적 또는 인스턴스 멤버가 있습니다. 이 변화는
완전히 이전 버전과 호환됩니다.

6001 - 제거됨

심각도: 오류

새 클래스는 이전 버전에 있던 필드를 제거했습니다. 기존 코드
해당 필드에 직접 액세스하는 것은 더 이상 유효하지 않습니다.

6002 - 가치관 of 아니 이상 a 컴파일 타임 상수

심각도: 경고

이전 버전의 클래스에 대해 컴파일된 코드는
이 필드의 값은 컴파일 타임 상수이기 때문입니다. 그러므로 기존의
이진 코드는 새 값 대신 이 필드의 이전 값을 계속 사용합니다.
값(인라인될 수 없음)

6003 - 가치관 of 컴파일 타임 상수 변경

심각도: 경고

이전 버전의 클래스에 대해 컴파일된 코드는
이 필드의 값은 컴파일 타임 상수이기 때문입니다. 그러므로 기존의
이진 코드는 새 값 대신 이 필드의 이전 값을 계속 사용합니다.
값.

6004 - 분야 유형 변경

심각도: 오류

지정된 정적 또는 지정된 인스턴스 멤버와 연결된 형식입니다.
수업이 바뀌었어요. 해당 필드에 직접 액세스하는 기존 코드는
더 이상 유효하지 않으므로 이는 호환되지 않는 변경입니다.

6005 - 분야 지금 최종적이지 않은

심각도: 정보

해당 필드는 이전에는 최종 필드였으며 더 이상 최종 필드가 아닙니다. 이는 해당 분야를 의미합니다.
이제 클래스나 인스턴스의 수명 동안 값을 수정할 수 있습니다.

필드의 값이 이전에 다른 클래스에 "인라인"될 수 있는지 여부는
이 메시지가 아닌 메시지 6002 및 6003으로 해결된 문제입니다.

6006 - 분야 지금 최후의

심각도: 오류

클래스 또는 인스턴스의 수명 동안에는 더 이상 필드를 수정할 수 없습니다.
따라서 이전에 이 필드를 수정한 코드는 더 이상 유효하지 않습니다.

6007 - 분야 지금 비정적

심각도: 오류

이제 필드는 클래스 변수가 아닌 인스턴스 변수입니다. 코드는
이전에 클래스의 인스턴스가 아닌 클래스를 통해 이 필드에 액세스했습니다.
더 이상 유효하지 않습니다.

6008 - 분야 지금 정적 인

심각도: 오류

이제 필드는 인스턴스 변수가 아닌 클래스 변수입니다.

어떤 이유로(아마도 내부 구현 문제) Java 표준은
이 변경 사항은 바이너리와 호환되지 않으며
"이전" 클래스에 대해 코드를 컴파일하면 In CompatibleClassChangeError가 발생합니다.
클래스 버전은 현재 필드가 있는 "새" 버전과 함께 사용됩니다.
공전.

소스 코드는 해당 클래스의 인스턴스를 통해 클래스 변수에 액세스할 수 있기 때문에
클래스의 경우 이는 소스 코드와 호환되는 변경일 것으로 예상됩니다. 그러나 현재
CLIRR은 소스 코드 호환성에 대해서도 이를 ERROR로 보고합니다.

6009 - 분야 더 보기 액세스

심각도: 정보

새 버전에서는 지정된 필드에 이전보다 더 많은 코드에 액세스할 수 있습니다.
이전에

6010 - 분야 적게 액세스

심각도: 오류

새 버전에서는 이전보다 적은 코드로 지정된 필드에 액세스할 수 있습니다.
이전에. 따라서 기존 코드는 더 이상 유효하지 않을 수 있습니다.

6011 - 제거됨 상수 분야

바이너리 심각도: 경고

소스 심각도: ERROR

새 클래스는 이전 버전에 있던 필드를 제거했습니다. 기존 소스
해당 필드에 직접 액세스하는 코드는 더 이상 유효하지 않습니다.

그러나 이전에는 필드가 최종 필드였으며 상수 값으로 초기화되었습니다.
따라서 이전 버전의 클래스에 대해 컴파일된 코드는 인라인됩니다.
이 상수이며 이 필드의 이전 값을 사용하여 계속 작동합니다. ㅏ
이는 종종 바람직하지 않은 동작이므로 경고가 발행됩니다. 그러나 그것은
바이너리 비호환성.

7000 - 방법 지금 in 슈퍼 클래스

심각도: 정보

이전 클래스에는 X라는 메서드가 있었습니다. 새 클래스에는 더 이상 이 메서드가 없지만
상위 클래스가 이 메소드를 정의하므로 바이너리 또는 소스 비호환성은 없습니다.
발생했습니다.

이 변경으로 인해 새 클래스가 강제로 변경될 수 있습니다.
'추상적인'. 이 경우 변경사항이 별도로 보고됩니다.

7001 - 방법 지금 in 인터페이스

심각도: 정보

이전 클래스나 인터페이스에는 이전에 X라는 메서드가 있었습니다. 새 클래스나 인터페이스에는
인터페이스에는 더 이상 이 메소드가 없지만 상위 인터페이스는 이를 정의합니다.
메서드이므로 바이너리 또는 소스 비호환성이 발생하지 않았습니다.

이 변경으로 인해 새 클래스가 강제로 변경될 수 있습니다.
'추상적인'. 이 경우 변경사항이 별도로 보고됩니다.

7002 - 방법 제거됨

심각도: 오류

이전 클래스나 인터페이스에는 X라는 메서드가 있었습니다. 새 클래스나 인터페이스에는
더 이상 이 메소드가 있으며 이 메소드는 상위 클래스 또는
인터페이스.

이 변경으로 인해 런타임에 실제로 오류가 발생하는지 여부는 사용법에 따라 다릅니다.
패턴. 수정된 클래스는 기존 코드와 함께 사용할 수 있습니다.
기존 코드는 제거된 메서드를 호출하려고 시도하지 않습니다. 실종자에게 전화가 오면
메서드가 만들어지면 메서드가 실행될 때 NoSuchMethodError 예외가 생성됩니다.
호출이 발생합니다.

7003 - 방법 재정의 제거됨

심각도: 정보

이전 클래스 또는 인터페이스에 지정된 메서드가 상속된 메서드를 재정의했습니다.
정의. 새 클래스 또는 인터페이스에는 더 이상 이 메서드가 명시적으로 없습니다.
선언되었지만 여전히 정의를 상속하므로 바이너리가 없습니다.
비호환성. 7004 - 메서드 인수 개수가 변경됨

심각도: 오류

지정된 메소드에 인수가 추가되거나 제거되었습니다. 이는 해당 코드를 의미합니다.
이전에 호출된 메서드는 더 이상 동일한 메서드를 호출하지 않습니다.

이전 프로토타입에 상속된 메서드 정의가 있는 경우에는
바이너리 비호환성; 이 이전 버전에 대해 컴파일된 코드
클래스는 이제 상속된 구현을 호출합니다. 이 상황에서 clirr는
오류가 아닌 INFO 메시지를 출력합니다. 그러나 현재 날짜에는 clirr
이 상황을 확인하지 않습니다.

이전 프로토타입에 상속된 메서드 정의가 없는 경우 변경 사항은 다음과 같습니다.
바이너리 비호환성입니다.

7005 - 방법 논의 타입 변경

바이너리 심각도: INFO 또는 ERROR

소스 심각도: ERROR

지정된 메소드에 하나 이상의 인수 유형이 수정되었습니다.
즉, 이전 버전의 클래스에 대해 컴파일된 코드는 더 이상
동일한 메서드를 호출합니다. 그러나 컴파일할 때 정확히 동일한 이전 소스 코드
인수 유형이 다음과 같은 경우 새 클래스 버전에 대해 이 메서드를 호출할 수 있습니다.
과제 호환.

이전 프로토타입에 상속된 메서드 정의가 있는 경우에는
바이너리 비호환성; 이 이전 버전에 대해 컴파일된 코드
클래스는 이제 상속된 구현을 호출합니다. 현재 날짜에서 clirr는
이 상황을 확인하지 마십시오.

이전 프로토타입에 상속된 메서드 정의가 없는 경우 변경 사항은 다음과 같습니다.
바이너리 비호환성입니다.

변경된 매개변수 유형이 모두 이전의 상위 유형으로 변경된 경우
선언된 유형 또는 기본 매개변수 유형이 "더 큰" 유형으로 변경된 경우
모든 경우에 유형이 있으면 새 코드는 이전 코드와 소스 코드 호환됩니다.
바이너리 호환이 아니더라도 해제하세요. 참고로 이 상황에서는
라이브러리를 사용하는 코드를 다시 컴파일하면 동작이 변경될 수 있습니다.
약간 다른 클래스의 메소드를 호출하는 상속된 메소드
원기. 현재 날짜에서 clirr는 이 상황을 확인하지 않습니다.

7006 - 방법 반품 타입 변경

바이너리 심각도: ERROR

소스 심각도: INFO 또는 ERROR

지정된 메소드의 선언된 반환 유형이 변경되었습니다. 문제인지
실제로 이 버전의 이전 버전에 대해 컴파일된 코드를 사용할 때 런타임에 발생합니다.
라이브러리는 사용 패턴에 따라 다릅니다. 이전 코드에서는 이 클래스에 대해 다른 메서드를 호출할 수 있습니다.
그러나 반환 유형이 변경된 메서드를 호출하려고 하면 다음과 같은 결과가 발생합니다.
메소드가 호출될 때 NoSuchMethodError가 발생합니다.
유형은 "메서드 서명"의 일부입니다.

새 반환 유형이 다음과 같은 경우에만 변경 사항이 소스 코드와 호환됩니다.
이전 반환 유형에 할당 가능합니다. 이는 다음을 의미합니다.

이전 반환 유형이 기본 유형인 경우 새 반환 유형은 다음과 같아야 합니다.
구형보다 폭이 좁아졌습니다.
이전 반환 유형이 인터페이스인 경우 새 반환 유형은 다음과 같아야 합니다.
이전 반환 유형을 구현하는 클래스 또는 인터페이스.
이전 반환 유형이 클래스인 경우 새 반환 유형은 하위 클래스여야 합니다.
이전에 반환된 유형입니다.

Clirr는 현재 메소드 변경에 대한 소스 코드 호환성을 확인하지 않습니다.
반환 유형; 현재 이는 단순히 ERROR로 보고됩니다.

7007 - 방법 추천하지 않습니다

심각도: 정보

지정된 메소드가 "사용되지 않음"으로 선언되었습니다. 이것은 항상
바이너리 호환 변경과 소스 코드 호환 변경이 있습니다.

7008 - 방법 더 이상 사용되지 않음

심각도: 정보

지정된 메소드는 이전 버전에서 "더 이상 사용되지 않음"으로 선언되었지만 더 이상 사용되지 않습니다.
현재 릴리스에서는 더 이상 사용되지 않습니다. 조금 특이하긴 하지만,
허용됩니다. 이 변경은 항상 바이너리 호환 변경일 뿐 아니라
소스 코드 호환 변경.

7009 - 방법 is 지금 적게 액세스

심각도: 오류

지정된 방법과 관련된 액세스 권한이 다음으로 강화되었습니다.
더 적은 수의 사용자 코드가 메서드에 액세스하도록 허용합니다.

이 변경 사항이 소스 코드 호환성 문제인지 여부는 다음에 따라 다릅니다.
사용 패턴.

이 변경은 바이너리 비호환성이어야 합니다. 그러나 현재 JVM은 다음을 수행합니다.
이것을 검증하지 마십시오. 이전 버전의 클래스에 대해 컴파일된 코드는
더 이상 액세스 권한이 없는 메소드를 성공적으로 호출합니다.
그럼에도 불구하고 Java 언어 사양에서는 이것이 오류라고 명시하고 있으므로
clirr는 이 변경 사항을 바이너리 비호환성으로 보고합니다.

7010 - 방법 is 지금 더 보기 액세스

심각도: 정보

지정된 메소드와 관련된 액세스 권한이 다음으로 완화되었습니다.
더 많은 사용자 코드가 메서드에 액세스할 수 있도록 허용합니다. 이는 항상 바이너리 및 소스 코드입니다.
호환 가능한 변경.

7011 - 방법 추가

심각도: 정보

지정된 클래스에 추상이 아닌 메소드가 추가되었습니다. 이것은 항상
바이너리 호환 변경.

이는 소스 코드와 호환되는 변경 사항이기도 합니다.

Q: 새 메서드가 상속된 메서드를 재정의하는 경우 어떤 버전에서 코드를 수행합니까?
이전 라이브러리 호출에 대해 컴파일되었습니까?

7012 - 방법 추가 인터페이스

바이너리 심각도: ERROR

소스 심각도: ERROR

지정된 인터페이스에 메소드 선언이 추가되었습니다. 이것은 항상
바이너리 호환성 오류로 보고되었지만 실제로는 변경된 클래스가
다음에 따라 이전 인터페이스에 대해 컴파일된 코드와 함께 성공적으로 사용할 수 있습니다.
사용 패턴.

새로운 코드(확장된 코드)에 대해 컴파일된 코드에 대해 메서드를 호출하는 이전 코드
인터페이스는 문제 없이 계속 작동합니다. 그리고
이전 버전의 인터페이스도 계속해서 올바르게 작동합니다.
코드는 해당 인스턴스에 대해 새로 추가된 메서드를 호출하려고 시도합니다. 하지만
인터페이스의 새 메소드 중 하나를 (유효하게) 호출하는 코드
이전 버전의 인터페이스만 구현하는 객체는
메서드 호출을 시도할 때 발생하는 AbstractMethodError입니다.

인터페이스에 메서드를 추가하면 항상 ERROR로 보고됩니다.
해당 인터페이스를 구현하는 인터페이스는 이제 선언된 인터페이스를 구현하기 위해 수정되어야 합니다.
방법.

7013 - 추상 방법 추가 클래스

바이너리 심각도: ERROR

소스 심각도: ERROR

지정된 클래스에 추상 메소드 선언이 추가되었습니다. 이것은
항상 바이너리 호환성 오류로 보고되지만 실제로는 변경된 클래스
다음에 따라 이전 클래스에 대해 컴파일된 코드와 함께 성공적으로 사용될 수 있습니다.
사용 패턴.

이전 클래스에 대해 컴파일된 객체의 인스턴스가 생성되면
메서드는 문제 없이 호출될 수 있습니다. 하지만 새로 추가된 추상 메소드가
호출된 경우 메서드가 호출될 때 AbstractMethodError가 발생합니다.
호출이 시도됩니다.

7014 - 방법 지금 최후의

심각도: 오류

이 메서드는 이전에는 최종이 아니었지만 이제 최종입니다. 이 클래스의 하위 클래스
더 이상 컴파일하거나 실행되지 않습니다.

이전 클래스에 이 메서드가 포함되어 있을 때 이 메서드는 최종 메서드였습니다(명시적으로 또는 제공하는 것만으로).
개인 생성자) 하위 클래스는 존재할 수 없습니다. Clirr는 현재 확인하지 않습니다.
이 상황에서는 일부 경우에 잘못된 경보가 발생합니다.

7015 - 방법 지금 최종적이지 않은

심각도: 정보

이 메서드는 이전에는 최종이었으며 현재는 최종이 아닙니다. 이것은 항상
바이너리 호환 변경.

8000 - 클래스 추가

심각도: 정보

새 버전의 라이브러리에는 이전 버전에 없었던 클래스가 있습니다.
번역.

8001 - 클래스 제거됨

심각도: 오류

새 버전의 라이브러리에는 더 이상 지정된 클래스가 포함되어 있지 않습니다.

사용 예


이전 버전과 라이브러리의 호환성을 확인하십시오.

clirr -o foo-1.0.jar -n foo-2.0.jar

Apache Commons Logging에 따라 새 라이브러리의 이전 버전과의 호환성을 확인합니다.

clirr -o foo-1.0.jar -n foo-2.0.jar -ocp /usr/share/java/commons-logging.jar -ncp
/usr/share/java/commons-logging.jar

홈페이지


http://clirr.sourceforge.net

2013년 XNUMX월 CLIRR(1)

onworks.net 서비스를 사용하여 온라인으로 clirr 사용


무료 서버 및 워크스테이션

Windows 및 Linux 앱 다운로드

  • 1
    Alt-F
    Alt-F
    Alt-F는 무료 오픈 소스를 제공합니다.
    DLINK용 대체 펌웨어
    DNS-320/320L/321/323/325/327L and
    DNR-322L. Alt-F에는 Samba와 NFS가 있습니다.
    ext2/3/4 지원...
    Alt-F 다운로드
  • 2
    usm
    usm
    Usm은 통합 슬랙웨어 패키지입니다.
    자동으로 처리하는 관리자
    종속성 해결. 그것은 통일한다
    다음을 포함한 다양한 패키지 저장소
    슬랙웨어, 슬랙키, 피...
    다운로드
  • 3
    Chart.js
    Chart.js
    Chart.js는 Javascript 라이브러리입니다.
    디자이너와 개발자가 그림을 그릴 수 있습니다.
    HTML5를 사용하는 모든 종류의 차트
    캔버스 요소. Chart js는 훌륭한 기능을 제공합니다.
    배열 ...
    Chart.js 다운로드
  • 4
    JasperReports 용 iReport-Designer
    JasperReports 용 iReport-Designer
    참고: iReport/Jaspersoft Studio 지원
    공지: 버전 5.5.0부터,
    Jaspersoft Studio가 공식적으로
    JasperReports용 디자인 클라이언트. iReport
    의지...
    JasperReports용 iReport-Designer 다운로드
  • 5
    설치 후 F
    설치 후 F
    PostInstallerF는 모든
    Fedora Linux 및 기타 소프트웨어
    기본적으로 다음을 포함하지 않습니다.
    처음으로 Fedora를 실행합니다. 그것의
    쉽게...
    PostInstallerF 다운로드
  • 6
    추적하다
    추적하다
    strace 프로젝트가 다음 위치로 이동되었습니다.
    https://strace.io. strace is a
    진단, 디버깅 및 교육
    Linux용 사용자 공간 추적기. 그것은 사용
    모니터하기 위해...
    다운로드
  • 더»

Linux 명령

Ad