Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

jarファイルの実行について

こんにちは。
Eclipseで作成したソースをexportでjarファイルにして
実行しようとしているのですが、うまくいきません。
どなたか解決方法がわかりましたらご教授願えないでしょうか。

作成したDataTransfer.jarはcドライブ直下に置きました。

C:\>dir
 ドライブ C のボリューム ラベルは S3A4361D001 です
 ボリューム シリアル番号は 0CC9-8989 です

 C:\ のディレクトリ

2008/03/23  00:03         6,430,765 DataTransfer.jar
    :
2008/03/20  21:18    <DIR>          WINDOWS
               4 個のファイル           6,430,786 バイト
              13 個のディレクトリ  15,288,774,656 バイトの空き領域


その後、以下のコマンドでクラスパスを指定して実行したのですが、実行できません。
C:\>java -classpath . DataTransfer
Exception in thread "main" java.lang.NoClassDefFoundError: DataTransfer


よろしくお願いします。

9

回答

92149

閲覧

9件の回答

評価

0

javaとだけタイプしてEnterを押すと下のように出ます。

c:\>java
Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)

評価

0

stcさん

今までクラスファイルでの実行しかした事なかったので知りませんでした。ありがとうございます。

しかし、
java -classpath . -jar DataTranser
と実行した所、Unable to access jarfile DataTransfer
となってしまいました。

また、java -classpath . -jar DataTransfer.jar DataTransferでは、
Failed to load Main-Class manifest attribute from
DataTransfer.jar
となってしまいます。

これは、jarファイルの作り方が悪いのでしょうか?

評価

0

>Failed to load Main-Class manifest attribute from
>DataTransfer.jar

mfファイルにMain-Classが指定されてないんじゃないでしょうか。

>java -classpath . -jar DataTransfer.jar DataTransfer

引数が必要なければ実行は
java -classpath . -jar DataTransfer.jar
でOKです。

評価

0

mfファイル自体がないとするとこっちでしょうか。
java -classpath DataTransfer.jar mainのあるクラス

評価

0

ありがとうございます。
mfファイルにきちんとmainメソッドのあるクラスを定義したら状況が少し変わりました。

以下のようになったのですが、これはLogFactoryが見つからないという事ですよね?
commons-logging-1.0.4.jarファイルもライブラリに入っているのですが、これも何か設定が必要なのでしょうか?

C:\>java -classpath . -jar DataTransfer.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lo
gging/LogFactory
        at jp.co.bos.transfer.DataTransfer.execute(DataTransfer.java:43)
        at jp.co.bos.transfer.DataTransfer.main(DataTransfer.java:38)

評価

0

commons-logging-1.0.4.jar
のクラスパスを通せば良いかと・・・

評価

0

歌舞伎モモさん、初心者ですみません。
以下のようにやってみたのですが、状況がかわりませんでした。
指定の方法が違うのでしょうか?


C:\>java -cp .;org.apache.commons.logging -jar DataTransfer.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lo
gging/LogFactory
        at jp.co.bos.transfer.DataTransfer.execute(DataTransfer.java:43)
        at jp.co.bos.transfer.DataTransfer.main(DataTransfer.java:38)

評価

0

javaコマンドは、-jarオプションを使っているときは-classpathオプションは無効になるのではなかったでしょうか?

環境変数CLASSPATHも無効になるので、
(1)MANIFESTファイルのClassPathに記述する
(2)必要なライブラリをextまたはendorsedディレクトリに配置する
(3)-Xbootclasspathあたりのオプションを使ってブートクラスパスに追加してしまう
位しか対策を思いつきませんが、(2)はデフォルト環境を汚してしまうし、(3)はjavaコマンドがかなり長くなってしまうので、(1)がお勧めです。

評価

0

ありがとうございます。
ONEさん解決いたしました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。