2011-07-28 5 views
3

jarファイルのUnix stringsコマンドに相当するコマンドがありますか?私は、このJavaファイルを持っている場合 jarファイルに入ったjava内で宣言された文字列を抽出するには

は、一例を挙げれば:

public class Foo { 
    String foo = "I\'m so meta even this acronym"; 
} 

コンパイルしてbar.jarに置か

私は、理想的には、その意志bar.jarにいくつかのコマンドを実行するようになります文字列 "I'm so meta"を標準出力に送り、grepすることができます。

私が解決しようとしている問題は、私のJavaプログラムにエラーメッセージが表示されていて、どのjarファイルがどのようなものかを知りたいのです。

+0

javapを使用して、jar内の特定のクラスをデコードすることができます。 –

+0

jarファイルはアーカイブのみです。 jarファイルからクラスファイルを抽出し、その上に 'strings'を使用することができます。 – Jacob

+0

@benhsu - 私はあなたのエラーメッセージとスタックトレースがないと仮定します。例外はどのように記録されますか?コンソールやLog4Jのようなライブラリを経由するには? – Perception

答えて

5

これはあなたのために働く必要があります。
unzip -p your.jar |strings| grep 'your string'

ディレクトリの使用で複数のJARファイルを検索するには:
unzip -p \*.jar |strings| grep 'your string'

2

Jarsはちょうどzipファイルなので、これは良い出発点です。

unzip -p myfile.jar | grep "Error message" 

が動作するようですが、unzipが制御文字を印刷して現在のコンソールを台無しにする可能性があります。実際にファイルをディレクトリに解凍し、その上で文字列を実行する方がよいでしょう。おそらくこのような何かが、私はそれを行うためのより効率的な方法がある賭ける

for file in `ls *.jar` 
do 
    echo $file 
    unzip -ol $file | awk '{ print $4 }' > extracted && cat extracted | xargs strings | grep "ERROR MESSAGE" && cat extracted | xargs rm -rf 
done 

を働くだろう、いくつかのシェルスクリプトの第一人者は、私は確信している私のためにこれをクリーンアップします。

-1

Unixでは "nohup"コマンドを試すことができます。ここでは、すべての例外と標準出力をファイルに追加されます

コマンドは

nohup java -jar bar.jar > bar.out & 

は今あなたのjarファイルの実行中にエラーメッセージをファイルbar.outを参照してくださいです。

0

あなたのエラーメッセージが例外をスローされた場合、私は調べることができますことをお勧めしたいですstacktraceを呼び出し、例外をスローするクラスとメソッドを取得します。その後、jad(java decompiler)を使用してクラスを逆コンパイルし、メッセージの到着場所を確認します。

関連する問題