JavaプロジェクトmyProject
があり、外部ライブラリjar(someJar.jar
)を使用していて、クラスがcom.somepackage.Class1.class
であるとします。Javaで "duplicate class"を避ける方法
ここで、元のjarのバグを修正するClass1.java
の更新版が見つかりました。
私はパッケージの下に自分のソースコード内の新しいClass1.java
com.somepackage
私はプロジェクト(例えば、Netbeansのを使用して)を構築する場合、また持つクラスを含むクラスcom.somepackage.Class1.class
とdist\lib\someJar.jar
が含まれていdist\myProject.jar
があるが含まれます同じ名前。
ファイルを実行すると(java -jar dist\myProject.jar
など)、新しいバージョンのClass1.class
が(必要に応じて)使用されます。
Javaは、そのような重複の場合にどのクラスファイルを実行するかをどのように決定しますか?優先順位を指定できる方法はありますか?
このような衝突を回避するための「正しい」方法はありますか?
Proguardでは、コードを圧縮しようとすると、
duplicate class
エラーが発生します。どうすればこれを排除できますか?
私はそれを行うことができます。しかし、将来、誰かがそのバールをアップグレードされたバージョン(バグ修正なし)に置き換えると、変更は失われます。私はバグ修正が失われていないことを保証するためにプロジェクトにJavaソースコードを保存することを好みます。ビルドツールでそれを行うことは可能ですか?注:バグ修正はライブラリの正式リリースの一部ではなく、次のライブラリの一部でもありません。 – Jus12
@ Jus12:jarファイルのコピーを作成し、そのクラスだけを更新することで、ビルドプロシージャの一部として更新されたjarファイルを作成することができます。しかし、私はあなたがまだ問題を抱えていると言いたい - クラスは* jarファイルの新しいバージョンで更新されている可能性があるので、スタンドアロンのバグ修正クラスファイルを使用すると問題が発生する可能性がある。バグ修正*が新しいバージョンの瓶に含まれない理由はありますか? –
私は 'smack' xmppライブラリについて話しています。バグ修正は' BOSH'の追加サポートです。今のところ、smackはBOSHをサポートしておらず、このハックは動作させるために必要です。なぜ彼らがまだそれをサポートしていないのか分かりません。 – Jus12