2012-01-30 12 views
1

.jarファイルの内容を別のディレクトリに抽出し、そのディレクトリにいくつかのファイルを追加してから、 jarファイルを追加します。私が見つけたjarファイルを抽出する方法はNSTaskを使ってjar xf (location of jar file)という端末コマンドを実行することでした。これはうまくいったが、プログラムのUIを(クラッシュさせずに)永久に停止し、アプリケーションを保存したディレクトリに内容を保存し直した。これを行う別の方法がありますか、またはNSTaskを間違って使用していますか?Objective-Cでの.jarファイルの解凍

//Unarchive the jar 
[self runCommandWithBase:@"/usr/bin/jar" arguments:[NSArray arrayWithObjects:@"xf", jarLocation, nil]]; 

- (NSString *)runCommandWithBase:(NSString *)base arguments:(NSArray *)arguments { 
//Create the task 
NSTask *task = [[NSTask alloc] init]; 

//Setup the task 
[task setLaunchPath:base]; 
[task setArguments:arguments]; 
[task setStandardInput:[NSPipe pipe]]; 
[task setStandardOutput:[NSPipe pipe]]; 

//Set file handle 
NSFileHandle *file = [[NSPipe pipe] fileHandleForReading]; 

//Run the command 
[task launch]; 

//Return 
NSData *returnData = [file readDataToEndOfFile]; 
return [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];} 

は多分、ファイルのアーカイブを解除、他のファイルを追加し、再うXcodeでJavaアプリケーションを含める方法があります:ここで私が使用していたコードですそれを圧縮する?その後、NSTaskでjavaアプリケーションを実行しますか?事前に

おかげで、

ベン

+0

* "..jarの内容を抽出して、.jarファイルにいくつかのファイルを追加することができます。" *これで実際に達成しようとしていることは何ですか?最善の解決策は余分なリソースをJarにしてから、アプリケーションの実行時クラスパスに追加することです。元のJarを変更する必要はありませんが、追加のJarをクラスパスに追加するためにマニフェストを更新する必要があります。 –

+0

jarファイル形式はzipファイル形式です。 obj-cにzipライブラリがある場合、これを使用してjarファイルを開いて圧縮することができます。目録が最初にある必要があるかもしれないが、実際にはそれは決して問題ではないので、いくつかの(可能な)合併症がある。 jarを変更する必要があるときは、通常、zipファイルエディタを使用します。 – Erik

答えて

1

.jarファイルを別の拡張子を持つファイル.zip以外の何ものでもありません。おそらくZIPファイルを開くlibで開くことができます。

変更内容とJARの作成方法によっては、checksumの変更を反映するために、manifest.mfファイルを/META-INF/に更新する必要があります。

+0

返信いただきありがとうございます!アップルが独自のファイルを提供していないので、オープンソースのzipファイルライブラリの1つを使ってみるつもりです。私は、私が使用する手作業の方法を置き換えるためのアプリケーションを書いています。手動の方法を実行したときに、私はいつもMETA-INFファイルを削除しました。 – GravityScore

+0

今朝あなたのメソッドを実装しました。答えに感謝します。 – GravityScore

関連する問題