2012-03-06 9 views
3

から1つのファイルを再コンパイルし、この問題は、彼がコメントの助けwitht解決されています逆コンパイル&瓶

正しいターゲットバージョンを使用してJavaを再コンパイルする必要がありました。私の場合、単にjavacの代わりにjavac -source 1.3 -target 1.3のトリックでした。

問題の説明:

私は、単一のURL文字列を変更する必要のあるコンパイルの.jar Javaプログラムを持っています。 JDを使用すると、コードを逆コンパイルして変更を加えることができました。

プロジェクト全体を再コンパイルするのを避けたいのですが、.classファイルに変更した単一の.javaファイルを単純に再コンパイルして元のファイルに置き換えることができたと思います。

しかし、jarを再パッケージ化した後、プログラムは起動しますが、変更したコードを使用する機能が不規則に動作します。私が見つけたログで

:問題の

E EventDispatchThreadExceptionHandler:Unhandled exception occurred during event dispatching.:: 
java.util.MissingResourceException: Can't find bundle for base name com.myCompany.mySoftware.resources.ModuleResources, locale en_US 
     at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:842) 

ModuleResources.javaは私が変更されたファイルである...

分析:

  1. Repackageingが故障していません:元の瓶を取り出して再パッケージ化すれば、すべてが機能します。
  2. 私の修正は問題ではないようです.JDデコンパイルされたJavaファイルを再コンパイルし、結果のクラスファイルを再パッケージ化に使用すると、同じエラーが発生します。

Iは再パッケージ化JARファイルを逆コンパイルし、元のJARファイルの逆コンパイルとそれを比較した:私が変更されたファイルでは、(少なくとも)コードが同一であるようだが、JDは、異なる行番号を示しています。それは問題を暗示することができますか?

ご協力いただければ幸いです。

多くの感謝!私はJD-逆コンパイルJavaファイルを再コンパイルし、再パッケージの結果のクラスファイルを使用する場合

+2

「プログラムが実行されていません」はかなり曖昧です - 詳細をお知らせください。 –

+0

JARのクラスはどのバージョンのJavaに対してコンパイルされていましたか?どのバージョンのJavaを使ってクラスを再コンパイルしていますか?エラーメッセージは何ですか? – Perception

+0

一般的に、この方法で動作するはずです。ジョンが言ったように、私たちは問題に関するより多くの情報が必要です - あなたは例外を見ますか? –

答えて

0

、私は同じ失敗

を得るこれはJDで指を指しているようです。 JDデコンパイルされたjavaファイルを再コンパイルすると、その結果を元の.classファイルと比較できますか(たとえば、両方を逆アセンブルして結果を比較するなど)?それらが実質的に異なっていれば、それはJDが間違っているという理論に信憑性を与えるだろう。もしそうでなければ、問題は他のところにある。

+0

私がこの質問で言ったように、両方の逆アセンブルされたコードは、JDが示す行番号を除き、実質的に同じです。 – ARF

+0

@ArikRaffaelFunke:あなたの質問には、「分解する」という言葉は言及されていません。あなたは逆コンパイルについて話しており、私は分解について話しています。後者は、バイトコードの違いを検出することに関してはるかに正確です。 – NPE

+0

ご迷惑をおかけして申し訳ありません。私は「逆アセンブル」を読むが、「逆コンパイル」は理解している。私の問題は解決されましたが、将来の参照のために、どのようにバイトコードを "逆アセンブル"しますか? – ARF