- PR -

Linux環境とCygwin環境の違いについて

投稿者投稿内容
未記入
会議室デビュー日: 2005/10/06
投稿数: 7
投稿日時: 2005-10-06 15:26
今までJavaの経験はなかったものです。
今回Linux(Red Hat)で動作していた環境をWindowのCygwinに移植することになりました。
そこで私の担当するモジュール(C)だけでなく、その上位で動作するJavaのソース一式ももらい、全ての環境構築を私がすることになりました。
しかしLinuxで動作していたのと同じディレクトリ構成、同じSDKのバージョン(1.4.2.09)にしてもLinuxで動作していたモジュールが実行できません。
エラーはException in thread "main" java.lang.NoClassDefFoundErrorと出ています。
実行スクリプトはLinuxと同じものでJAVA_HOMEの設定も間違っていません。
またantで正常にコンパイルできています。
何か考えられることはありますでしょうか?
社内の人間にも聞いてみましたが、いい助言は得られませんでした。
お手数ですが、経験者の方で、もし考えられることがありましたら教えていただけませんでしょうか?
よろしくお願いいたします。
さる
ぬし
会議室デビュー日: 2005/07/14
投稿数: 276
お住まい・勤務地: 実家戻ったw
投稿日時: 2005-10-06 15:41
引用:

未記入さんの書き込み (2005-10-06 15:26) より:
エラーはException in thread "main" java.lang.NoClassDefFoundErrorと出ています。



WindowのCygwinに移植した経験はありませんが、普通上記のエラーはパスがきちんと設定されていない事でおきますねぇ〜。
おっきー
大ベテラン
会議室デビュー日: 2003/05/01
投稿数: 104
投稿日時: 2005-10-06 15:50
JAVA_HOME の設定がうまくいってないですね。

JAVA_HOMEは .bashrc などでパスを通すのではなく
Windowsの環境変数に追加します。
.bashrc では 以下の記述を追加して Cygwin 用のパスに変換してます。

[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath -u "$JAVA_HOME"`

確かどこかのページに紹介されていたのですが、忘れてしまいました。
yuzy
大ベテラン
会議室デビュー日: 2002/02/14
投稿数: 117
投稿日時: 2005-10-06 15:56
Exception in thread "main" java.lang.NoClassDefFoundError
が出ているので、クラスパスの設定に問題があるように思えます。
未記入
会議室デビュー日: 2005/10/06
投稿数: 7
投稿日時: 2005-10-06 16:25
書き込んですぐなのに、多くの方にお返事を頂きまして大変光栄です。
まずさるさんの助言によりますと、パスが設定されていないということですが、エラーが出るということはjava.exeにはパスが通っているということですので、そうするとクラスパスの設定が足りないということでしょうか・・・。
そうするとyuzyさんの助言と合致いたします。
ちなみに現在は使用しているjarファイルを全て:でつなげて絶対パスで設定しているのですが(.も含む)、Main.classがあるディレクトリも追加してみました。
しかし残念ながら同じメッセージが表示されてしまいました。
他にインストールしたディレクトリなどの指定が必要なのでしょうか・・・。

またおっきーさんからご指摘頂きましたJAVA_HOMEの件なのですが、envで確認しましたが、確かにcygwinのパスで間違いありませんでした。

たくさんの助言ありがとうございます。
進展がありましたら随時ご報告いたします。
さる
ぬし
会議室デビュー日: 2005/07/14
投稿数: 276
お住まい・勤務地: 実家戻ったw
投稿日時: 2005-10-06 17:47
あ、ごめんなさい、パスじゃなくてクラスパスですね。
;でつなぎませんか。
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2005-10-06 17:51
引用:
jarファイルを全て:でつなげ



もしかして、クラスパスの各エントリにコロンを使ってますか?

Java2 SDK ツールとユーティリティより、

Linux
(略)‥‥クラスパスの各エントリはコロン (:) で区切ります。‥‥

Windows
(略)‥‥クラスパスの各エントリは、セミコロン (;) で区切ります。‥‥
未記入
会議室デビュー日: 2005/10/06
投稿数: 7
投稿日時: 2005-10-06 18:41
再びご回答ありがとうございます。
Windowsではクラスパスを;で区切るとは知りませんでした。
最初からしっかりと記述すればよかったと反省しております。
そこで、早速クラスパスの指定を;に変えて実行してみたところ、指定したjarファイルが全てcannot execute binary fileとエラーが出て、最終的に以前と同じエラーとなりました。
これはJavaが出したというよりCygwinが出したエラーメッセージだと思ったので、単純にこれらのjarファイルに実行権限を付けてみました。
しかし状況は同じでした。
もちろんこのjarファイルはWindows環境でantしてエラーなく出力されたファイルです。
いずれにしてもまだ実行はできませんが一歩前進はしたようです。
引き続きチャレンジしていきたいと思います。
ご親切にありがとうございます。
今後ともよろしくお願いします。

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