特定のサードパーティのライブラリ(JAR)にバグがあるため、
バグのあるクラスだけソースコードに手を入れました。
しかし作ったアプリをMavenで実行可能JARにすると、
どうもクラスロード時に探す順番が変わると見えて
修正したクラスではなく元のJARの中のクラスが使われてしまいます。
こういう場合、どうすればよいでしょうか?
確認した訳ではないですが、以下の方法があるかと思っています。
・サードパーティライブラリの再構築
・出力jarファイルのMANIFESTの書き換え
・Mavenの設定でクラスパスの順序を指定(できるかどうか不明)
後者2つについては、ロードされるのはどちらか一方であったとしても、実行時に同一クラスの実体がクラスパス中に2つ存在してしまうので、将来的なことも含めると何かと問題になりそうです。
サードパーティライブラリの再構築であれば、現在の開発中に1度だけjarファイルを再構築するだけですみ、シンプルだと思うのですが、いかがでしょうか?
jarを一度解凍し、対象クラスファイルのみを修正したものに置換し、再度jarファイルにし、それを利用するということです。
やはりそういう形になりますか…
その場合、サードパーティが配布しているものに手を加えて配布することになるので
ライセンス的にOKなのかどうか検討する必要が出てきて面倒に思ったのでした。