2011-02-03 90 views
1

私はEclipseを使用していますが、私はかなり単純なプロジェクトを持っています。コードを保存します。それはうまく実行され、うまく動作します。 2つの.javaファイルがあります。実際には、プロジェクトツリーは次のようになります。.JARファイルの作成に失敗しました。

**mewLog** 
- src/ (dir) 
    mewlog/ (package) 
    - MLGlobal.java 
    - MLMain.java (surprise, this one contains main and some initialization methods)  
    mlGUI/ (package) 
    - this one is empty (empty package!) 

したがって、ファイル - >エクスポートに行きます。私はいつも通りの手順に従い、警告や問題なしに.JARファイルを正常に作成します。良い!

これまでのところは良いものを言うので、私は私のターミナルまで突進、私は私のjarファイルをエクスポートしたフォルダに移動し、次のようにそれを実行します。

java -jar mewLog_macosx-x86.jar 

BAMを!ここでそれは間違って、端末は私に次の出力を与える:

Exception in thread "main" java.lang.NoClassDefFoundError: MLMain 
Caused by: java.lang.ClassNotFoundException: MLMain 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 

Ok。あなたが言う前に、 "ああhurr durrあなたはクラスパスを追加する必要があります"。私はしようとした、それは動作しません、私は "BLAH"私は何をしても与える。

私はMac OS X Snow Leopardを使用しています。 jar -tf mewLog_MacOSX-x86.jar

jar -tf mewLog_MacOSX-x86.jar 
META-INF/MANIFEST.MF 
.project 
.classpath 
mewlog/MLGlobal.class 
mewlog/MLMain.class 

答えて

2

から

出力は

java -cp mewLog_macosx-x86.jar mewlog.MLMain

動作しますか?

ので、その後ジャーでマニフェストファイルが間違ったメインクラスを指している(アカウントにパッケージを取っていない)場合

+0

からEclipse用Fatjarプラグインのインストールを参照してください。 –

+0

「機能していない」とは何ですか?これは質問をしない方法の良い例です。これを読んでください:http://www.catb.org/~esr/faqs/smart-questions.html – duffymo

+0

@Jesse:それは間違っているからです。コマンドラインでメインクラスを指定するときは、-jarではなく-cpでなければなりません。 –

1

まず、.javaファイルはJARファイルに行っていない - の.classファイルは行います。 JVMは.javaファイルを実行できません。まずそれらをコンパイルする必要があります。

第2に、これを実行可能なJARにする場合は、mainメソッドを持つクラスを指定するマニフェストを追加する必要があります。

Eclipseを最初から残しておき、初めて手作業で行うことをおすすめします。/binディレクトリのjar.exeツールを使用します。

Here'sあなたに役立つ(またはそうでないかもしれない)リンク。

+0

私はすでに.JARを解凍しています。その中のファイルは.classファイルです。私が作成したように、マニフェストがあります。私はJavaに新しいものではありませんが、これまでにこれまでに遭遇したことはありません。私が何をしても、それは機能しません。しかし、ありがとう。 –

+0

さて、.classファイルは正しいパッケージ構造に対応するパスを示していますか?あなたのマニフェストは正しいですか?私があなたに送ったリンクをたどってください - それはあなたがする必要があることを正確に伝えます。それでも動作しない場合は、間違っていることを意味します。 – duffymo

+0

私はそれを試みます、うまくいけばそれは私を助けるでしょう。ありがとう。 –

0

"ファイル - >エクスポート - > Java - > JARファイル"または "ファイル - >エクスポート - > Java - >実行可能なJARファイル"を選択しましたか? Manifest.MFファイルがVMにメインクラスの情報を伝えない限り、jarはデフォルトでは実行可能ではありません。

0

コンパイルされたクラスをjarに入れ、メインクラスであるマニフェストファイルで指定する必要があります。

ターミナルでこれを試してみてください:

$cat Hola.java 
package hola; 

class Hola { 
     public static void main(String ... args) { 
       System.out.println("Hola mundo!"); 
     } 
} 

$cat m.mf 
Main-Class: hola.Hola 

$javac -d . Hola.java 


$jar -cmf m.mf hola.jar hola 

$java -jar hola.jar 
Hola mundo! 

次に、あなたのjarファイルの内容を比較し、(明らかに異なるクラス名の横に)違うのか見

をここでのポイントは、の構造かどうかを確認することですあなたのjarファイルが正しいかどうかを確認してください(jar -tf mewLog_macosx-x86.jarの出力も役立ちます)

これが役立ちます。

+0

これで、進捗状況が確認されました。mewLog_MacOSX-x86.jarからMain-Classマニフェスト属性をロードできませんでした。 –

+0

アップデートごとに、Doonの(訂正された)回答が機能するはずです。 'open myjar'で起動するか、それをダブルクリックして起動できる自己実行型のjarファイルを作成するには、マニフェストファイルを作成しなければなりません。ここで' Main-Class'がどのファイルであるかを指定します(上記の例を参照)。 – OscarRyz

1

あなたの問題は、メインクラスを完全修飾名で表示する必要があることです。つまり、パッケージを含めることです。 JavaはクラスMLMainを探しています。つまり、クラスパスのルートから直接見えます。しかし、あなたのクラスはパッケージ内のmewlog.MLMainです。

+0

Doon "コメント/回答/質問"を参照してくださいhttp://stackoverflow.com/questions/4891924/creating-a-jar-file-nothing-works-desperate-help/4891959#4891959私はfqnの問題ではないと思う – OscarRyz

+0

@ OscarRyz:そこにコメントを見てください。 –

+0

コメントをここに忘れてください:) – OscarRyz

0

私は、Java -jarを使用して、コマンドラインからJARファイルを作成し、ビルドプロセスに習熟

  1. をお勧めします。

  2. http://download.oracle.com/javase/tutorial/deployment/jar/basicsindex.htmlが、残念ながら、動作しないhttp://fjep.sourceforge.net/

+0

良い主人、Eclipseは実行可能なJARを作成するためにプラグインを本当に必要としますか? – duffymo

+0

@duffymo:いいえ、あなたのコードが* other * jarsに依存しない限り、Eclipseは正常に動作します。そうであれば、自分自身でeclipseを実行して実行可能なjarファイルにすべてのクラスを再パッケージ化します。これは面倒であり、法的に疑わしいかもしれません。 Fatjarは入れ子になったjarファイルを作成します。特殊なクラスローダーが必要で、非常に遅いです。本当に良い解決策はありません。 –

+0

プラグインをインストールするにはちょっと馬鹿だと言われていました:P –