goo blog サービス終了のお知らせ 

役立たずのプログラマーブログ

自分の得た知識や経験をブログに書くことで整理し、考えをまとめることが目標

MANIFEST.MFとjarファイル

2008-01-09 09:24:00 | プログラム
eclipseでexport->jar形式のファイルってしてやっても、なんかうまくいかない。
やり方があるのだろうけど、そもそもウィザード任せはよくないので、
ちょっと調べた。忘れても良いようにメモしておく。
(何ヶ所か改行が変なのは、gooのTextエディターがおかしいため)

Sunの説明ページ(英語)
教えてgooでの解説

eclipseで出力したjarファイルは、なんかMETA-INF/MANIFEST.MFの記述がそのままでは色々と足りない。なので一度解凍してみる。
$jar -xf jarfile.jar

そして、MANIFEST.MFにメインクラス(エントリーポイント)と必要なモジュールへのパスを書く。
(両者ともにコマンドラインから指定可能だが後で説明する)
$cat META-INF/MANIFEST.MF
Manifest-Version: 1.0
Main-Class: ConnectionManager/ConnectionManager
Class-Path: . /usr/share/java/mysql-connector-java.jar

Name: ConnectionManager/
Sealed: true

アトリビュート内はスペース、アトリビュート間は空行で区切られる。
SealedはNameのクラス内に必要なクラスが入っていて、定義されているクラスは全て同じjarファイル内にあることを示し、バージョンの一貫性を保つためにあるらしい。
が、正直よくわからん。

Main-ClassとClass-Pathを書いたら、$jar -cvfm [jarfilename.jar] [MANIFEST.MF] [クラス]の形で指定してjarファイルにする。
$jar -cvfm test.jar META-INF/MANIFEST.MF ConnectionManager/ConnectionManager.class

こういうのが出たら、何か指定が間違っているか、MANIFEST.MFがおかしい。
java.io.IOException: invalid header field
        at java.util.jar.Attributes.read(Attributes.java:393)
        at java.util.jar.Manifest.read(Manifest.java:182)
        at java.util.jar.Manifest.<init>(Manifest.java:52)
        at sun.tools.jar.Main.run(Main.java:132)
        at sun.tools.jar.Main.main(Main.java:1022)

うまくできたら実行してみる。
$java -jar test.jar


MANIFEST.MFに記述せずにコマンドから指定するときは、
$java -cp [クラスパス and ./][
Main-Class] [jarfile.jar]
$java -cp ./mysql-connector-java.jar:./ ConnectionManager/ConnectionManager test.jar

Eclipseエディタの色設定

2007-12-11 11:35:59 | プログラム
黒背景が好きなので、Eclipseの色設定をイジることにした。
んだけども、結構面倒で一時間かけて出来たのがエディタ部分の色設定変更だけだった。
ちょいと忘れそうなのでメモ

=== Step.1 背景色を黒にする ==============================================
Window->preferenceでダイアログを開いて、図の所の色を黒にする

(あと、Current line highlightも黒めの灰色にしておく。)

=== Step.2 Systax Colorを変更する。 ====================================
コメント色やらなにやらここで変更。
まずは、Otherの色を白から黒にしてからやること。


=== Step.3 Marc Occurrenceのハイライト色を変更 =========================
Eclipseはメソッドの上にカーソルをポインタすると、同じメソッドをハイライトしてくれる。

(一行灰色背景なのは、step1でのCurrent Line highlight部分)

この色の変更は下の図の場所。



なんか面倒だから、きっと便利なプラグインとかテーマとか一発で色変える技があるんじゃあるまいか。

追記:日本語入力するときに、デスクトップテーマをイジらないと文字が見えない
とりあえずgnomeのテーマとかから、
システム->設定->ルックアンドフィール->インストールでダウンロードしたテーマを適用する。

デザインパターンの説明があるサイト(JAVA)

2007-12-10 23:50:37 | プログラム
デザインパターンの説明があるサイト(JAVA)
オブジェクト指向への誘い
結構わかりやすい。ただ文章説明がたるいのでコードを理解してから読むのがいい。

デザパタは、理屈は理解できても自分で使うレベルにまで理解ができない。
一通りここで復讐したら色々と理解のためのテスト用アプリを作る必要があるかな。

The art of computer programming の小切手($2.56)をゲット

2007-11-26 20:37:23 | プログラム


The Art of Computer Programming Vol.1 日本語版の誤記を見つけて、ASCIIへメールした。
てっきり、日本語版の誤植と思っていたけども原書からの誤記だった。

住所氏名をASCIIへ連絡してから一月以上たって、すっかり忘れていたが、
今日、ようやく小切手が届いた。
内容物は小切手と、やりとりした簡単な英文メール二通。
同封されていた英文のメールを見るかぎり、翻訳者様が間にはいってMr,Knuthに連絡して下さった模様。
ここなぞ見ることもないだろうけども、お礼申し上げます。
どうも有難うございました。

C++での二次元配列のポインタ

2007-10-07 23:59:29 | プログラム
FAQだと思うが、情けないことに知らなかったのでメモ。

Cでの二次元配列のポインタは、
int a[3][2];
int **p = a;
でコンパイル通っていた。しかし、C++でこれをやるとコンパイルエラー。
正しくは、
int (*p)[2] = a;

俺の理解では、
一次元「配列」→「ポインタ」。
二次元「大きさが2の配列」の「配列」→「大きさが2の配列」の「ポインタ」。