137

いつものようにクラスを再コンパイルしたところ、突然次のエラー メッセージが表示されました。なんで?どうすれば修正できますか?

java.lang.SecurityException: class "Chinese_English_Dictionary"'s signer information does not match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(ClassLoader.java:776)
4

19 に答える 19

149

これは、同じパッケージに属するクラスが異なるJARファイルからロードされ、それらのJARファイルが異なる証明書で署名された署名を持っている場合に発生します。それらのAFAIKは署名できないため、ディレクトリから)。

したがって、すべてのJAR(または少なくとも同じパッケージのクラスを含むJAR)が同じ証明書を使用して署名されていることを確認するか、パッケージが重複しているJARファイルのマニフェストから署名を削除してください。

于 2010-05-20T19:57:42.533 に答える
49

それを回避する簡単な方法は、(Eclipse)から実行できるインポートされたjarファイルの順序を変更してみることです。パッケージを右クリック->ビルドパス->ビルドパスの構成->参照とライブラリ->注文とエクスポート。署名ファイルを含むjarの順序を変更してみてください。

于 2011-06-17T15:30:26.093 に答える
26

私の場合、ライブラリ パスに BouncyCastle の JAR バージョンを複製しました:S

于 2014-11-02T16:38:08.120 に答える
6

これは、CGLIBがアプリケーションターゲットクラスの署名者情報の代わりに独自の署名者情報を使用するため、cglib-instrumentedプロキシで発生する可能性があります。

于 2011-11-30T10:36:09.423 に答える
4
  1. 署名後、dist\lib にアクセスします。
  2. 余分な .jar を見つける
  3. Winrar を使用して、フォルダを抽出する (「フォルダ名」に抽出) オプション
  4. アクセス: META-INF/MANIFEST.MF
  5. 次のように各署名を削除します。

名前: net/sf/jasperreports/engine/util/xml/JaxenXPathExecuterFactory.class SHA-256-Digest: q3B5wW+hLX/+lP2+L0/6wRVXRHq1mISBo1dkixT6Vxc=

  1. ファイルを保存する
  2. もう一度圧縮する
  3. Renaime ext to .jar back
  4. すでに
于 2013-02-18T05:13:31.993 に答える
2

Eclipse で実行している場合は、ビルド パスに追加されたすべてのプロジェクトの jar を確認してください。または、control-shift-T を実行して、同じ名前空間に一致する複数の jar をスキャンします。次に、冗長または古い jar をプロジェクトのビルド パスから削除します。

于 2014-12-21T06:00:41.833 に答える
1

少し古いスレッドですが、これでかなり長い間立ち往生していたので、ここで修正します(誰かの役に立てば幸いです)。

私のシナリオ:

パッケージ名は com.abc.def です。このパッケージのクラスを含む 2 つの jar ファイルがあります。たとえば、jar1 と jar2 です。つまり、いくつかのクラスは jar1 に存在し、他のクラスは jar2 に存在します。これらの jar ファイルは同じキーストアを使用して署名されますが、ビルドの異なる時点で (つまり、別々に) 署名されます。その結果、jar1 と jar2 のファイルの署名が異なるようです。

すべてのファイルを jar1 に入れ、それらをまとめてビルド (および署名) しました。問題は解決します。

PS: パッケージ名と jar ファイル名は単なる例です。

于 2016-12-01T18:09:26.897 に答える
0

これは、異なる名前または異なる場所からの1つのファイルを2回含める場合、特にこれらが同じファイルの2つの異なるバージョンである場合にも発生します。

于 2013-02-21T11:43:23.587 に答える
0

私はそれを修正することができました。

根本原因: これは、署名付き jar で Sun JAXB 実装を使用する場合の一般的な問題です。基本的に、JAXB 実装は、リフレクションを使用せずにプロパティに直接アクセスするクラスを生成することで、リフレクションを回避しようとしています。残念ながら、このエラーの発生元であるアクセスされているクラスと同じパッケージにこの新しいクラスが生成されます。

解決策: 次のシステム プロパティを追加して、署名付き jar と互換性のない JAXB 最適化を無効にします: -Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true

参照: https://access.redhat.com/site/solutions/42149

于 2014-06-06T12:34:48.260 に答える
0

@Mohit Phougat の応答に基づいて、@Grab アノテーションを使用して Groovy を実行している場合は、そのようなアノテーションの並べ替えを試みることができます。

于 2015-08-26T23:50:55.470 に答える