- PR -

JARが壊れる??

1
投稿者投稿内容
くろくま
会議室デビュー日: 2003/12/12
投稿数: 14
投稿日時: 2004-07-08 12:58
JAVAに限らずとは思いますが、
「生成したはずのjarが、何だかおかしくなっていた」
というような経験された方は、いらっしゃるでしょうか。

今、上記のような状況に直面しています。
(jarがおかしいと判断した理由は、環境&ソースは変更せず、リビルドするとエラーが解消されたため)

私は、JAVAは初心者なのですが、Cを使っていた時は、生成したプロセスが壊れていたということがたまにありました。

私が直面している状況がどうなのかは別として、
jarのビルド手順として、皆さんが注意していることがあれば、アドバイスいただきたいのです。
(複数回ビルドしてみて、jarのサイズを確認するetc)

よろしくお願いします!!
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-07-08 15:13
引用:

「生成したはずのjarが、何だかおかしくなっていた」


すみませんが、おっしゃることがよく分かりません。
そもそも、jarファイルをどのようにして、何のために生成されていますか?

  • JDK付属のjarコマンドを使われていますか?
  • Javaプログラム内からJarOutputStreamを用いて生成していますか?

「おかしい」と判断された理由はなんでしょうか?

  • 生成したjarファイルJDK付属のjarコマンドで解凍できなかったからですか?
  • Javaプログラム起動時に生成したjarファイルをクラスパスに入れたらうまく動かなかったからですか?

引用:

(jarがおかしいと判断した理由は、環境&ソースは変更せず、リビルドするとエラーが解消されたため)


ここでの「リビルド」とはjarファイルの作成を意図されていますか?

引用:

私は、JAVAは初心者なのですが、Cを使っていた時は、生成したプロセスが壊れていたということがたまにありました。


Cで「生成したプロセスが壊れて」ということは、「forkシステムコールで
プログラム内から子プロセスを生成したらそれが壊れた」ということでしょうか?
プロセスが壊れる、と言うのは穏やかな話ではありませんね。OSがおかしいのでは
ないかと思われます。
あみゅせる
常連さん
会議室デビュー日: 2004/07/08
投稿数: 33
お住まい・勤務地: 神奈川県
投稿日時: 2004-07-08 15:55
こんにちは

これは、jarとかプロセスとか限定なしに
ソースファイル群→最終生成ファイル
の過程のことをおっしゃられてると解釈しました。

最近の統合環境では各ソースファイル群の依存関係は
自動的に判断されて、通常ビルドは最小限の変更ですむように
最適化されてると思います。

最近は「インクリメンタルリンク」なんて、
仕組みは良くわからないですが
変更箇所のみリンクできるのでしょうか。

まぁそれらが万能なら「リビルド」なんて概念はなくて、
みんな部分ビルドで終ってしまうでしょう。(極論か・・・)

経験ということで云えば

過去にmakeファイルをまじめに表記しないと、依存関係がめちゃめちゃで
呼ばれる関数と呼ぶ側のプロトタイプを平気で異なるままリンクしたりできます。
もちろん正常に動かない組み合わせも存在します。

M社なりB社なりの統合環境でも良くわからない現象になるとそれを疑います。
(ソースの無いとこにブレイクポイントするとか。)

特に手順などは気にしていませんが
「おかしな現象になったらリビルド(&コーヒーブレーク)」

明確でなくてすみません・・・。
_________________
くろくま
会議室デビュー日: 2003/12/12
投稿数: 14
投稿日時: 2004-07-08 16:11
おばけさん、コメントありがとうございます。

厳密な状況をつっこまれると少々苦しいですが、持ち合わせている知識で回答いたします。

●jarファイルは、JDK付属のjarコマンドで生成しています。
●リビルドとは、jarファイルの作成を指しています。

問題となったjarは、ejbやappletではなく、ただのjavaアプリです。
(言葉合ってますでしょうか? javaコマンドで実行するAPです。)


●「おかしい」と判断した経緯ですが、簡単に言いますと、
それまで正常に動いていた機能が、異常終了するようになったということが発端です。

1.環境&ソースは変更していなが、jarは再生成してあった
2.jarを別名で保存する、あるいは、一時的に移動する、といった操作を実施した
3.jarを再度作り直して、起動してみたところ、正常に動き出した。


jarを生成した場所と、それを実行させる場所は、だいたいに置いて違うと思うのです。
jarの移動やコピーは、皆さん普通に行われていると思っています。
2の操作でおかしくなった(OSが悪い?)かもしれませんが、生成したjar自体が悪かったんじゃないかという疑いも捨てきれず、今回発言させていただきました。

●C言語での話も、同じ状況です。fork関数を使用したら、、、といようなことではありません。


やはり、OSやハード的な問題でしょうか。jarの生成手順で、保険をかけるというようなことは無意味でしょうか・・・。


くろくま
会議室デビュー日: 2003/12/12
投稿数: 14
投稿日時: 2004-07-08 16:34
あみゅせるさん、コメントありがとうございます。


>これは、jarとかプロセスとか限定なしに
>ソースファイル群→最終生成ファイル
>の過程のことをおっしゃられてると解釈しました。

そうです!!
イメージは、そこです。ここでおかしくなるということがあり得るのかどうか、
あったとしたら、皆さんどうされているのか、、、。

makeファイルの問題もあるわけですね。確かに。
そこまでチェックしていませんでした。もう少し勉強してみます。

ありがとうございました。
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2004-07-08 19:20
一度jarファイルの中身を確認してみることをお薦めします。
単純に展開するのではなく、内部の状態を表示するツールを使うとよりわかりやすいです。
jarコマンドのtオプションとか、+LhacaのようなGUIツールが使用できます。

ちなみに私も似たような経験がありまして、この場合jarでなくてearなのですが
(といっても中は一緒です)、Antのearタスクとwarタスクを使って作成したところ、
earファイルが不正な形式とみなされサーバへの配備に失敗したことがあります。
不思議に思いearファイルの中のwarファイルを覗いたところ、
同じ名前のファイルが2つずつ存在していました。

このときは「既存のwarファイルを削除して作り直したのではなく、
既存のwarファイルに追加する形でwarが作成されているらしい。
Antのwarタスクは、デフォルトでuオプションがつくのか」と解釈し、
warファイルの作成前に古いファイルを削除するようにして解決しました。
他にもwarタスクのオプション指定を間違っていたためにWEB-INF以下の
ファイルを二重に追加していたりと、いろいろ間違いがあったのですが(;^ ^)。

くろのまさんがどういった手順でjarコマンドを使っているのはわかりませんが、
似たような症状ということで参考になれば幸いです。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-07-08 19:45
何となく現象が分かったような分からないような。。。
引用:

一度jarファイルの中身を確認してみることをお薦めします。


仰るとおりですね。これがまず必須だと思います。

ちなみに、ご存知かもしれませんが、Jarファイルは単なるZipファイルとしても
開くことが出来ます。ですから、WindowsならGUIのZipビューアが色々とあり
ますが、これらで開くことが出来ます。

引用:

同じ名前のファイルが2つずつ存在していました。
・・・(略)・・・
既存のwarファイルに追加する形でwarが作成されているらしい。


この現象は私にも経験があります。

仰るように、「既存のJarファイルに追加」してしまう場合もありますし、Antで
Jarファイルを作成すると、「同じファイルを二度指定してしまう」という
場合もありました。Jarファイルへの追加対象となるファイルのセットに、
誤って同じファイルが2度エントリされてしまう場合で、これは単純にAntの
スクリプトの記述ミスが原因でした。

ご参考までに。
くろくま
会議室デビュー日: 2003/12/12
投稿数: 14
投稿日時: 2004-07-09 10:13
koeさん、おばけさん、

すごいヒントを戴きました!!!
実は、jarを作成する手順が二つ用意されています。

1.antを使用する手順
2.javac→jarコマンドを使用する手順(シェルを組んであります)

環境によってはantがないこともあるため、2の手順でjarを作ることになっているのですが、今回antを使用した可能性は十分にあります。

まずは、jarファイルの中身を確認してみます。antも勉強する必要がありそうです。

ありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)