12

Googleアプリエンジンにウェブアプリケーションをデプロイしましたが、ウェブサービスはジャージ1.14フレームワークを使用しています。GAEでWebサービスを使用または呼び出そうとすると、java.lang.IncompatibleClassChangeError:Implementingclassが発生します。調べてみると、ジャージ1.14はasm 3.1に依存しており、Google AppEngineはasm4.0を使用しており、この問題を解決するにはJarJarを使用して依存関係をパッケージ化する必要があることに気付きましたが、これを行う方法についての手がかりがありません。 JarJarで。私が見つけたチュートリアルは非常に謎めいていて、経験豊富なプログラマーを対象としているので、誰かが初心者向けのチュートリアルを投稿したり、この問題を解決するための手順を説明したりできます。

4

2 に答える 2

17

これはかなり遅い答えですが、誰かが通り過ぎれば助けになるかもしれません。例を挙げて説明します。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 は同じフォルダーに保存され、競合することなくプロジェクトで使用できます

于 2015-11-08T09:33:35.397 に答える
0

jdk の jar コマンドを使用して、jar ファイルを抽出およびマージできます。
jar -xvf firstjar.jar .... jar クラスのフォルダー/パッケージを抽出します -com/pak1/pak2
同じように 2 番目の jar を抽出し、展開された両方のフォルダーをマージし
ます。
jar -cvf mergedjar.jar [フォルダ名 [ex com org ...]]詳細については、jar コマンドの動作を確認してください。

于 2014-01-10T12:43:54.013 に答える