Googleアプリエンジンにウェブアプリケーションをデプロイしましたが、ウェブサービスはジャージ1.14フレームワークを使用しています。GAEでWebサービスを使用または呼び出そうとすると、java.lang.IncompatibleClassChangeError:Implementingclassが発生します。調べてみると、ジャージ1.14はasm 3.1に依存しており、Google AppEngineはasm4.0を使用しており、この問題を解決するにはJarJarを使用して依存関係をパッケージ化する必要があることに気付きましたが、これを行う方法についての手がかりがありません。 JarJarで。私が見つけたチュートリアルは非常に謎めいていて、経験豊富なプログラマーを対象としているので、誰かが初心者向けのチュートリアルを投稿したり、この問題を解決するための手順を説明したりできます。
2 に答える
これはかなり遅い答えですが、誰かが通り過ぎれば助けになるかもしれません。例を挙げて説明します。jarjar を使用して、Java ライブラリを再パッケージ化できます。名前空間を変更するために使用できます。たとえば、org.apache.common.codec を some_random_name.org.apache.common.codec に変更する必要があります。jarjar ダウンロード サイトからjarjar をダウンロードします。後で、変更する jar ファイル (myinjar.jar) とダウンロードした jarjar を 1 つのフォルダーに貼り付け、myrules.txt でこのコマンドを実行しますjava -jar jarjar-1.4.jar process myrules.txt myinjar.jar myoutjar.jar
。これらの行を追加します。
rule org.apache.commons.codec.** some_random_name.org.apache.commons.codec.@1
出力 myoutjar.jar は同じフォルダーに保存され、競合することなくプロジェクトで使用できます
jdk の jar コマンドを使用して、jar ファイルを抽出およびマージできます。
jar -xvf firstjar.jar .... jar クラスのフォルダー/パッケージを抽出します -com/pak1/pak2
同じように 2 番目の jar を抽出し、展開された両方のフォルダーをマージし
ます。
jar -cvf mergedjar.jar [フォルダ名 [ex com org ...]]詳細については、jar コマンドの動作を確認してください。