apacheなどで作成されたjarファイルの中身を修正したい場合、jarファイルを一端解凍し、編集後再度jarコマンドでかためます。
その場合、jar cvfで実行するとjar内のパスがローカルディレクトリの設定になってしまう。
例えばこんな感じ。
$jar tvf lucene-analyzers-kuromoji-4.6.0.jar
0 Tue Dec 31 00:55:20 JST 2013 META-INF/
68 Tue Dec 31 00:55:20 JST 2013 META-INF/MANIFEST.MF
0 Tue Dec 31 00:55:20 JST 2013 home/tomoaki/workspace/jarfiles/
0 Tue Nov 19 11:06:04 JST 2013 home/tomoaki/workspace/jarfiles/org/
0 Tue Nov 19 11:06:04 JST 2013 home/tomoaki/workspace/jarfiles/org/apache/
0 Tue Nov 19 11:06:04 JST 2013 home/tomoaki/workspace/jarfiles/org/apache/lucene/
0 Tue Nov 19 11:06:04 JST 2013 home/tomoaki/workspace/jarfiles/org/apache/lucene/analysis/
0 Tue Dec 31 00:53:46 JST 2013 home/tomoaki/workspace/jarfiles/org/apache/lucene/analysis/ja/
(以下略)
これだとjarのパスが eclipse (というかアプリ)上で正しく通らず、使えなくなってしまう。
自分はここで少しつまずいたので、メモ。
解決策
この場合、マニフェストを利用してjarをかためればよいです。
マニフェストファイルは、何をどのように圧縮するか記載されているファイルです。
中身↓
$cat MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_30-b12 (Sun Microsystems Inc.)
Extension-Name: org.apache.lucene
Specification-Title: Lucene Search Engine: analyzers-kuromoji
Specification-Version: 4.6.0
Specification-Vendor: The Apache Software Foundation
Implementation-Title: org.apache.lucene
Implementation-Version: 4.6.0 1543363 - simon - 2013-11-19 11:06:25
Implementation-Vendor: The Apache Software Foundation
X-Compile-Source-JDK: 1.6
X-Compile-Target-JDK: 1.6
具体的にはjarを解凍したディレクトリ(apacheの場合orgやMETA-INFがあるディレクトリ)で以下コマンド実行します。
※例 /org/apache/...のようなパスに設定したい場合
jar cvfm lucene-analyzers-kuromoji-4.6.0.jar ./META-INF/MANIFEST.MF ./
オプションは
c jarファイルの作成(jar cf hoge.jar ./ でカレントディレクトリ以下をhoge.jarというjarファイルにする)
v 詳細な出力を標準出力に生成
f ファイル名の指定(つけなければ標準出力に出力される)
m META-INF/MANIFEST.MFのファイルで指定したマニフェスト・ファイルを読み込む
実行結果
$jar cvfm lucene-analyzers-kuromoji-4.6.0.jar ./META-INF/MANIFEST.MF ./
マニフェストが追加されました
エントリMETA-INF/を無視します
エントリMETA-INF/MANIFEST.MFを無視します
META-INF/LICENSE.txtを追加中です(入=24577)(出=7110)(71%収縮されました)
META-INF/NOTICE.txtを追加中です(入=9488)(出=3435)(63%収縮されました)
META-INF/services/を追加中です(入=0)(出=0)(0%格納されました)
META-INF/services/org.apache.lucene.analysis.util.TokenFilterFactoryを追加中です(入=1050)(出=528)(49%収縮されました)
(以下略)
以上です。