これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド clirr です。
プログラム:
NAME
clirr - Java ライブラリのソースとバイナリの互換性をチェックする
SYNOPSIS
クリル -o オールドジャー -n ニュージャー [オプション]
DESCRIPTION
Clirr は、Java ライブラリのバイナリおよびソースの古いバージョンとの互換性をチェックするツールです。
リリースします。 基本的に、XNUMX セットの jar ファイルを与えると、Clirr は次のリストをダンプします。
パブリック API の変更。
OPTIONS
-a, --show-all-scopes
プライベートクラスとパッケージクラスを表示
-f, -出力ファイル
出力ファイル名
-i, --include-pkg
このパッケージとそのサブパッケージのクラスのみを含めます
-n, - 新しいバージョン
新しいバージョンのjarファイル
-ncp, --新しいクラスパス
新しいバージョンによって参照されるサードパーティのクラスパス
-o, --古いバージョン
古いバージョンのjarファイル
-ocp, --orig-クラスパス
古いバージョンで参照されているサードパーティのクラスパス
-p, --show-pkg-scope
パッケージスコープクラスを表示
-s, - スタイル [テキスト|xml]
出力スタイル
メッセージ
clirr が、jar ファイルの変更に関するエラー、警告、または情報メッセージを生成する場合
比較すると、関連するメッセージ参照コードがあります。 このマニュアルには、
メッセージの意味の説明。これには、理解できない情報が含まれている可能性があります。
短いメッセージの要約に組み込む必要があります。
メッセージは、エラー、警告、情報の XNUMX つの重大度レベルに分類されます。
エラーには XNUMX つの種類があります。
リンク時のエラー。コードがコンパイルされるとすぐに例外がスローされます。
古いバージョンのクラスに対してロードされ、新しいバージョンのクラスがロードされます。
同じクラスローダー階層。
実行時エラー。コードが古いバージョンに対してコンパイルされたときに例外がスローされます。
クラスのバージョンが新しいバージョンのクラスのメソッドを呼び出そうとする、またはその逆
逆もまた同様です。
Clirr は、実行時にエラーが発生する可能性がある場合に「エラー」を報告します。 かどうか
実際に起こることは、ライブラリの呼び出し方法、つまり報告される変更によって異なります。
ライブラリの使用パターンが正しい限り、実際に使用するとエラーが機能する可能性があるためです。
障害状況を引き起こさないようにします。
警告は、リンクまたはランタイム例外が発生しない状況に対して発行されますが、
発生した変更によりアプリケーションが予期せぬ動作をする可能性がある場合。
情報メッセージは、新機能に関する情報をユーザーに提供します。
下位互換性を一切損なうことなく追加されました。
clirr を使用してプライベート スコープまたはパッケージ スコープを持つ項目への変更をレポートする場合、これらは
変更は常に INFO レベルの変更として報告され、WARNING または ERROR レベルでは報告されません。 これ
clirr のユーザーが開発者に適したレベルで「変更レポート」を生成できるようにします。
これらの変更の一部が (無関係に) バイナリ非互換性としてマークされることはありません。
プライベート クラス、メソッド、またはプロパティへの変更に対してバイナリの非互換性が発生することはありません。
アクセスは同じクラス内 (つまり、同じコンパイル) 内からのみ発生するため、フィールドにアクセスできます。
単位)。
Clirr は、パッケージ スコープのアイテムに対するバイナリの非互換性の警告またはエラーを報告しません
Java パッケージは「リリース単位」、つまり、その中のすべてのクラスであることを目的としているためです。
パッケージは一緒にコンパイルされ (互換性が確保され)、ユニットとしてリリースされます。 唯一の
パッケージ スコープの非互換性が問題になる可能性があるのは、
ライブラリは、外部に属するパッケージ宣言を使用して独自のクラスを作成します。
ライブラリ、またはパッケージから更新されたクラスのサブセット (単一クラスなど) が使用される場合
ライブラリの以前のリリースの特定のクラスをオーバーライドします。 これら両方とも
Java プログラミング規約では、このような状況は非常に不適切な行為であると考えられます。
以下のセクションでは、「古い」という用語はクラス、インターフェイス、メソッドを指すために使用されます。
または、古い/以前の/オリジナル/ベースラインのバージョンを表す jar のセットからのフィールド
検査中のライブラリ。 「新しい」という用語は、クラス、インターフェイス、
新しい/現在/最新のバージョンを表す jar のセットからのメソッドまたはフィールド
検査中の図書館。
以下のセクションでは、「タイプ」という用語は、次のようなものを指すために使用されます。
クラスまたはインターフェイスのいずれか。
1000 - 増加 視認性 of class
重大度: 情報
指定された型は両方のバージョンに存在しますが、その宣言されたアクセス指定子には
他のコードがアクセスできる制限を緩和するために変更されました。
最上位の型 (つまり、別のクラス内にネストされていない型) には、
「パッケージ」または「パブリック」のアクセシビリティ。 ネストされた型は XNUMX つのいずれかを引き受けることができます
利用可能なアクセシビリティ値。
オブジェクトがトップレベルであるかネストされているかに関係なく、アクセシビリティが変更されます。
シーケンスの左から右に、private->package->protected->public always
以前にその型にアクセスできたすべてのコードが引き続きその型にアクセスできるようにします。
タイプ。 したがって、そのような変更は常にバイナリおよびソースコードと互換性があります。
「保護」宣言により、
同じパッケージ内のタイプとコードへのアクセス、つまり「保護された」アクセシビリティも意味します
パッケージのアクセシビリティ。
1001 - 減少した 視認性 of class
重大度: エラー
指定された型は両方のバージョンに存在しますが、その宣言されたアクセス指定子には
他のコードがアクセスできるようにするための制限を強化するために変更されました。
最上位の型 (つまり、別のクラス内にネストされていない型) には、
「パッケージ」または「パブリック」のアクセシビリティ。 ネストされた型は XNUMX つのいずれかを引き受けることができます
利用可能なアクセシビリティ値。
型がトップレベルであるかネストされているかに関係なく、アクセシビリティの変更
シーケンスの左から右へ、public->protected->package->private により、次のような問題が発生する可能性があります。
以前は型にアクセスできた既存のコードは、アクセスできなくなります。
Java 言語仕様のセクション 13.4.3 では、次のように明示的に述べられています。
既存のバイナリが型にアクセスしようとすると、IllegalAccessError が発生するはずです
型のアクセシビリティが、問題を引き起こすようなものに変更されたとき。
コンパイル時エラー。 ただし、これは実際には強制されていないようです。
現在の JVM では少なくとも。 それにもかかわらず、これはエラーであるはずなので、clirr が報告します。
この変更はバイナリ互換性エラーとして発生します。
2000 - かわった from class 〜へ インタフェース
重大度: エラー
指定されたクラスは、新しいバージョンではインターフェイスになりました。 この変化は、
明らかな理由から、常にバイナリとソースコードの互換性がありません。
2001 - かわった from インタフェース 〜へ class
重大度: エラー
指定されたインターフェイスは、新しいバージョンではクラスになりました。 この変化は、
明らかな理由から、常にバイナリとソースコードの互換性がありません。
3001 - 削除済み ファイナル 修飾子 from class
重大度: 情報
指定されたクラスは古いバージョンで最終クラスとして宣言されましたが、現在は最終クラスではありません
新しいバージョンでは。
3002 - 追加されました ファイナル 修飾子 〜へ 効果的に ファイナル class
重大度: 情報
指定されたクラスは古いバージョンではfinal宣言されていませんでしたが、現在は宣言されています
最後の。 通常、これは非互換性になります。
このクラスの新しいバージョンで使用すると、クラスは無効になります。
ただし、この場合、古いクラスのバージョンにはパブリックまたは保護されたコンストラクターがありませんでした。
そのため、古いバージョンの場合でも派生クラスが存在することはできませんでした。
図書館。 したがって、このようなクラスを Final に変更しても、既存のクラスを壊すことはできません。
コード。
3003 - 追加されました ファイナル 修飾子 〜へ class
重大度: エラー
指定されたクラスは古いバージョンではfinal宣言されていませんでしたが、現在は宣言されています
最後の。 このクラスのサブクラスとして宣言された既存のクラス
したがって、ライブラリの新しいバージョンでは無効になります。
VerifyError は、クラスローダーをロードしようとするとクラスローダーによってスローされます。
最終クラスのサブクラス。
クラス Y は、最初のクラスローダーが実行されたときにのみ標準クラスローダーによってロードされることに注意してください。
Y のインスタンスを作成するか、クラスを直接参照しようとします。
クラス Y のオブジェクト。他のクラス X がクラス Y を宣言されたメンバーとして、または
パラメータをメソッドに指定した場合、クラス X をロードしてもクラス Y はロードされません。
3004 - 削除済み 抽象的な 修飾子 from class
重大度: 情報
このクラスの古いバージョンは、抽象クラスとして宣言されていました。 新しいバージョン
は抽象ではないため、ユーザーがクラスのインスタンスを作成できます。
3005 - 追加されました 抽象的な 修飾子 〜へ class
重大度: エラー
このクラスの古いバージョンは抽象クラスとして宣言されていませんでした。 新しいバージョンは
抽象的な。 このクラスのインスタンスを作成する既存のコードは廃止されました。
新しいバージョンでも有効です。
4000 - 追加されました インタフェース 〜へ セッションに of 実装 インターフェース
重大度: 情報
この型の新しいバージョンでは、追加のインターフェイスが実装されるようになりました。 これはそうではありません
既存のコード (ソースまたはバイナリ) を無効にし、完全に
下位互換性のある変更。
このメッセージは、変更が発生しなくても報告できることに注意してください。
指定されたタイプ; タイプによってサポートされるインターフェイスのセットに変更を加えると、
このメッセージは、そのタイプの子孫ごとに報告されます。
4001 - 削除済み インタフェース from セッションに of 実装 インターフェース
重大度: エラー
この型の古いバージョンでは、インターフェイスを実装すると宣言していました。
新しいクラスやインターフェイスはそうではありません。 明示的または暗黙的にキャストする既存のコード
現在欠落しているインターフェイスに対するこのタイプのオブジェクトは無効になります。
このメッセージは、変更が発生しなくても報告できることに注意してください。
指定されたタイプ; タイプによってサポートされるインターフェイスのセットに変更を加えると、
このメッセージは、そのタイプの子孫ごとに報告されます。
5000 - 追加されました class 〜へ セッションに of スーパークラス
重大度: 情報または警告
新しいバージョンのクラスには、その継承階層に古いバージョンのクラスが含まれています。
バージョンは、直接の親が別のクラスになったため、そうではありませんでした。または、
親クラスの XNUMX つがその継承階層を変更したためです。
指定されたクラスに祖先として java.lang.Throwable がある場合、この変更は次のようになります。
このクラス変更により例外キャッチが変更される可能性があるため、警告として報告されます。
このクラスを使用するプログラムの動作。
このメッセージは、変更が発生しなくても報告できることに注意してください。
指定されたクラス。 祖先クラスのスーパークラスのセットを変更すると、
このメッセージがすべての子孫クラスに対して報告されるようにします。
5001 - 削除済み class from セッションに of スーパークラス
重大度: エラー
このクラスの古いバージョンには、その継承階層にクラスがあります。
新しいバージョンでは、その直接の親が別のクラスになったため、そうではありません。
親クラスの XNUMX つがその継承階層を変更したためです。
この型のオブジェクトを明示的または暗黙的に now にキャストする既存のコード
欠落しているクラス タイプは無効になります。
このメッセージは、変更が発生しなくても報告できることに注意してください。
指定されたクラス。 祖先クラスのスーパークラスのセットを変更すると、
このメッセージがすべての子孫クラスに対して報告されるようにします。
このクラスの祖先に Throwable がある場合、クラス
階層の変更により、例外をキャッチする動作も変更される可能性があります。
このクラスを使用するプログラム。
6000 - 追加されました フィールド
重大度: 情報
新しいクラスには追加の静的メンバーまたはインスタンス メンバーがあります。 この変化は、
完全に下位互換性があります。
6001 - 削除済み フィールド
重大度: エラー
新しいクラスは、古いバージョンに存在していたフィールドを削除しました。 既存のコード
そのフィールドに直接アクセスするものは無効になります。
6002 - 値 of フィールド いいえ より長いです a コンパイル時 定数
重大度: 警告
古いバージョンのクラスに対してコンパイルされたコードは、
このフィールドの値はコンパイル時の定数であったためです。 したがって、既存の
バイナリ コードは、このフィールドの新しい値ではなく、古い値を引き続き使用します。
値 (インライン化できません)。
6003 - 値 of コンパイル時 定数 持っています 変更
重大度: 警告
古いバージョンのクラスに対してコンパイルされたコードは、
このフィールドの値はコンパイル時の定数であったためです。 したがって、既存の
バイナリ コードは、このフィールドの新しい値ではなく、古い値を引き続き使用します。
の値です。
6004 - フィールド type 変更
重大度: エラー
指定された静的メンバーまたは指定されたインスタンス メンバーに関連付けられた型
クラスが変わりました。 そのフィールドに直接アクセスする既存のコードは使用できません。
有効ではなくなるため、これは互換性のない変更です。
6005 - フィールド 今 非最終的な
重大度: 情報
このフィールドは以前は最終的でしたが、現在は最終的ではありません。 これは、フィールドが
クラスまたはインスタンスの存続期間中に値を変更できるようになりました。
フィールドの値を以前に他のクラスに「インライン化」できたかどうかは、
この問題は、このメッセージではなく、メッセージ 6002 および 6003 で解決されています。
6006 - フィールド 今 ファイナル
重大度: エラー
クラスまたはインスタンスの存続期間中はフィールドを変更できなくなります。
したがって、以前にこのフィールドを変更したコードは無効になります。
6007 - フィールド 今 非静的
重大度: エラー
フィールドはクラス変数ではなくインスタンス変数になりました。 コード
以前は、クラスのインスタンスではなくクラスを介してこのフィールドにアクセスしていました
は無効になりました。
6008 - フィールド 今 静的な
重大度: エラー
フィールドはインスタンス変数ではなくクラス変数になりました。
何らかの理由 (おそらく内部実装の問題) により、Java 標準
この変更はバイナリ互換ではないこと、および
コードが「古い」ものに対してコンパイルされた場合、IncompatibilityClassChangeError がスローされます。
クラスのバージョンは、フィールドが現在使用されている「新しい」バージョンと一緒に使用されます。
静的。
ソースコードはそのインスタンスを介してクラス変数にアクセスすることが許可されているため、
クラスの場合、これはソースコードと互換性のある変更であることが期待されます。 ただし現在は
CLIRR は、ソースコードの互換性のためにこれもエラーとして報告します。
6009 - フィールド その他 アクセス可能な
重大度: 情報
新しいバージョンでは、指定されたフィールドに以前よりも多くのコードがアクセスできるようになりました。
以前は
6010 - フィールド もっと少なく アクセス可能な
重大度: エラー
新しいバージョンでは、指定されたフィールドにアクセスできるコードが以前よりも少なくなりました。
以前。 したがって、既存のコードは有効ではなくなる可能性があります。
6011 - 削除済み 定数 フィールド
バイナリ重大度: 警告
ソース重大度: エラー
新しいクラスは、古いバージョンに存在していたフィールドを削除しました。 既存のソース
そのフィールドに直接アクセスするコードは無効になります。
ただし、以前は、このフィールドは最終フィールドであり、定数値で初期化されていました。
したがって、クラスの以前のバージョンに対してコンパイルされたコードはインライン化されます。
この定数は、このフィールドの以前の値を使用して引き続き機能します。 あ
これは多くの場合望ましくない動作であるため、警告が発行されます。 ただし、それはそうではありません
バイナリの非互換性。
7000 - 方法 今 in スーパークラス
重大度: 情報
古いクラスには X という名前のメソッドがありました。新しいクラスにはこのメソッドはありませんが、
親クラスがこのメソッドを定義しているため、バイナリまたはソースの非互換性はありません。
発生しました。
この変更により、新しいクラスが強制的に次のようになる可能性があることに注意してください。
'抽象的な'。 この場合、この変更は別途報告されます。
7001 - 方法 今 in インタフェース
重大度: 情報
古いクラスまたはインターフェイスには、以前は X という名前のメソッドがありました。新しいクラスまたは
インターフェイスにはこのメソッドはありませんが、親インターフェイスでこれが定義されています。
メソッドなので、バイナリまたはソースの非互換性は発生しません。
この変更により、新しいクラスが強制的に次のようになる可能性があることに注意してください。
'抽象的な'。 この場合、この変更は別途報告されます。
7002 - 方法 削除済み
重大度: エラー
古いクラスまたはインターフェイスには X という名前のメソッドがありました。新しいクラスまたはインターフェイスには、
このメソッドはもう存在しませんが、このメソッドはどの親クラスにも定義されていません。
インタフェース。
この変更の実行時に実際にエラーが発生するかどうかは、使用状況によって異なります。
パターン。 変更されたクラスは、次の条件を満たす限り既存のコードで使用できます。
既存のコードは、削除されたメソッドを呼び出そうとしません。 行方不明者に電話がかかってきた場合
メソッドが作成され、メソッドが作成されたときに NoSuchMethodError 例外が生成されます。
呼び出しが発生します。
7003 - 方法 オーバーライド 削除済み
重大度: 情報
古いクラスまたはインターフェイスで指定されたメソッドが、継承されたメソッドをオーバーライドしていました。
意味。 新しいクラスまたはインターフェイスには、このメソッドが明示的に含まれなくなりました。
宣言されていますが、依然として定義を継承しているため、バイナリはありません
互換性のなさ。 7004 - メソッドの引数の数が変更されました
重大度: エラー
指定されたメソッドには引数が追加または削除されています。 これは、そのコードを意味します
以前に呼び出された場合は、同じメソッドは呼び出されなくなります。
古いプロトタイプで継承されたメソッド定義がある場合、
バイナリの非互換性。 この古いバージョンに対してコンパイルされたコード
クラスは継承された実装を呼び出すようになります。 この状況では、clirr は次のようにする必要があります。
エラーではなく INFO メッセージを出力します。 ただし、現在の日付では、clirr
この状況をチェックしません。
古いプロトタイプで継承されたメソッド定義がない場合、変更は
バイナリの非互換性です。
7005 - 方法 引数 タイプ 変更
バイナリ重大度: INFO または ERROR
ソース重大度: エラー
指定されたメソッドの XNUMX つ以上の引数の型が変更されました。
これは、古いバージョンのクラスに対してコンパイルされたコードは、
同じメソッドを呼び出します。 ただし、コンパイルするとまったく同じ古いソースコード
新しいクラス バージョンに対して、引数の型が次の場合にこのメソッドを呼び出すことがあります。
割り当て互換。
古いプロトタイプで継承されたメソッド定義がある場合、
バイナリの非互換性。 この古いバージョンに対してコンパイルされたコード
クラスは継承された実装を呼び出すようになります。 現在の日付で、clirr は次のことを行います。
この状況を確認しないと。
古いプロトタイプで継承されたメソッド定義がない場合、変更は
バイナリの非互換性です。
変更されたパラメータのタイプがすべて以前のスーパータイプに変更された場合
宣言された型、または「より大きな」ものに変更された場合のプリミティブ パラメーター型の場合
あらゆる場合に型の場合、新しいコードは以前のコードとソースコード互換性があります。
バイナリ互換性がない場合でもリリースします。 この状況では、
ライブラリを使用するコードを再コンパイルすると、その動作が、
継承されたメソッドと、わずかに異なるクラスのメソッドの呼び出し
プロトタイプ。 現時点では、clirr はこの状況をチェックしていません。
7006 - 方法 返品 タイプ 変更
バイナリ重大度: エラー
ソース重大度: INFO または ERROR
指定されたメソッドの宣言された戻り値の型が変更されました。 問題があるかどうか
この古いバージョンに対してコンパイルされたコードを使用すると、実際には実行時に発生します。
ライブラリは使用パターンによって異なります。 古いコードは、このクラスの他のメソッドを呼び出す可能性があります。
ただし、戻り値の型が変更されたメソッドを呼び出そうとすると、次のような結果になります。
メソッドが呼び出されたときに NoSuchMethodError がスローされる。
type は「メソッド シグネチャ」の一部です。
新しい戻り値の型が次の場合に限り、変更はソースコードと互換性があります。
古い戻り値の型に割り当てることができます。 この意味は:
古い戻り値の型がプリミティブ型である場合、新しい戻り値の型は次のようにする必要があります。
旧タイプより幅が狭いです。
古い戻り値の型がインターフェイスの場合、新しい戻り値の型は
古い戻り値の型を実装するクラスまたはインターフェイス。
古い戻り値の型がクラスの場合、新しい戻り値の型はサブクラスである必要があります
以前に返された型。
現在、Clirr はメソッドの変更に対するソースコードの互換性をチェックしていません
戻り値の型。 現在、これらは単にエラーとして報告されます。
7007 - 方法 持っています き 非推奨の
重大度: 情報
指定されたメソッドは「非推奨」として宣言されています。 これは常に
バイナリ互換の変更とソースコード互換の変更。
7008 - 方法 持っています き 非推奨
重大度: 情報
指定されたメソッドは以前のバージョンで「非推奨」と宣言されましたが、非推奨ではありません。
現在のリリースでは非推奨になりました。 少し珍しいですが、これは
許可されています。 この変更は常にバイナリ互換の変更であるだけでなく、
ソースコード互換の変更。
7009 - 方法 is 今 もっと少なく アクセス可能な
重大度: エラー
指定されたメソッドに関連付けられたアクセス許可が次のように強化されました。
メソッドにアクセスできるユーザーコードが少なくなります。
この変更がソースコードの互換性の問題であるかどうかは、
使用パターン。
この変更はバイナリの非互換性になるはずです。 ただし、現在の JVM は次のことを行うことに注意してください。
これを検証しません。 以前のバージョンのクラスに対してコンパイルされたコードは、
アクセス権を持たなくなったメソッドを正常に呼び出すことができます。
それにもかかわらず、Java 言語仕様には、これはエラーであると記載されているため、
clirr は、この変更をバイナリの非互換性として報告します。
7010 - 方法 is 今 その他 アクセス可能な
重大度: 情報
指定されたメソッドに関連付けられたアクセス許可が次のように緩和されました。
より多くのユーザーコードがメソッドにアクセスできるようにします。 これは常にバイナリおよびソースコードです
互換性のある変更。
7011 - 方法 追加されました
重大度: 情報
指定されたクラスに非抽象メソッドが追加されました。 これは常に
バイナリ互換の変更。
これはソースコード互換性のある変更でもあります。
Q: 新しいメソッドが継承されたメソッドをオーバーライドする場合、どのバージョンがコードを実行しますか
古いライブラリ呼び出しに対してコンパイルされていますか?
7012 - 方法 追加されました 〜へ インタフェース
バイナリ重大度: エラー
ソース重大度: エラー
指定されたインターフェイスにメソッド宣言が追加されました。 これはいつも
バイナリ互換性エラーとして報告されますが、実際には、変更されたクラスは
に応じて、古いインターフェイスに対してコンパイルされたコードで正常に使用できるかどうか
使用パターン。
新しい (拡張された) コードに対してコンパイルされたコードでメソッドを呼び出す古いコード
インターフェースは問題なく動作し続けます。 そして、を実装する古いコード
古いバージョンのインターフェースも、以下のことがない限り正しく動作し続けます。
コードは、そのインスタンスに対して新しく追加されたメソッドのいずれかを呼び出そうとします。 しかし
インターフェース内の新しいメソッドの XNUMX つを (有効に) 呼び出すコード
古いバージョンのインターフェイスのみを実装するオブジェクトは、
メソッドの呼び出しが試行されたときにスローされる AbstractMethodError。
インターフェイスにメソッドを追加すると、クラスは常にエラーとして報告されます。
そのインターフェイスを実装するものは、宣言されたインターフェイスを実装するように変更する必要があります。
方法。
7013 - 抽象 方法 追加されました 〜へ CLASS
バイナリ重大度: エラー
ソース重大度: エラー
指定されたクラスに抽象メソッド宣言が追加されました。 これは
常にバイナリ互換性エラーとして報告されますが、実際には変更されたクラス
に応じて、古いクラスに対してコンパイルされたコードで正常に使用できる可能性があります。
使用パターン。
古いクラスに対してコンパイルされたオブジェクトのインスタンスが作成された場合、そのインスタンスは
メソッドは問題なく呼び出すことができます。 ただし、新しく追加された抽象メソッドが
一度呼び出されると、メソッドの実行時に AbstractMethodError がスローされます。
呼び出しが試行されます。
7014 - 方法 今 ファイナル
重大度: エラー
このメソッドは以前は最終的ではありませんでしたが、現在は最終的です。 このクラスのサブクラス
コンパイルも実行もできなくなります。
このメソッドを含む古いクラスが (明示的に、または単に提供することによって) 最終的なとき
プライベート コンストラクター) の場合、サブクラスは存在できません。 現在Clirrはチェックしていません
この状況では、これにより、いくつかの特殊なケースで誤った警報が発生する可能性があります。
7015 - 方法 今 非最終的な
重大度: 情報
このメソッドは以前は最終的でしたが、現在は非最終的です。 これは常に
バイナリ互換の変更。
8000 - CLASS 追加されました
重大度: 情報
新しいバージョンのライブラリには、古いバージョンには存在しなかったクラスが含まれています
バージョン。
8001 - CLASS 削除済み
重大度: エラー
新しいバージョンのライブラリには、指定されたクラスが含まれなくなりました。
例
ライブラリと以前のバージョンの互換性を確認します。
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年11月 クリル(1)
onworks.net サービスを使用してオンラインで clirr を使用する