2016-04-04 14 views
1

をロードまたは見つけることができなかった私は、jarファイルからアプリケーションを実行しようとしてきたが、それはプリントアウトし続ける:Jarファイルは、メインクラス

「メインクラスを見つけたり、ロードすることはできません...」。

このthreadからの情報を使用してこの問題を解決しようとしましたが、すべて役に立たないようです。正直言って、これはあまりにも些細な問題なので、私は絶望的になっています。

とにかく、私がやったこと:

Main-Class: com.test.Test 

私のマニフェスト属性:

jar cfm test.jar manifest.txt <full_path>/out/com/test/*.class 

(Test.classファイル)

jarファイルにパッケージ化されているものです

試験クラス:

package com.test; 

public class Test { 
    public static void main(String[] args) { 
     System.out.println("Hello World"); 
    } 
} 
+3

それをどのように起動しようとしていますか? – KevinO

+3

jarを正しくパッケージ化しているとは思われません(フォルダ構造を保持していません)。私は 'jar cfm test.jar manifest.txt /out /' –

+0

を 'java -jar'または' java -cp'で実行したいと思っていますか? – fukanchik

答えて

1

クラスを正しくパッケージする必要があります。 Do

jar cfm test.jar manifest.txt com/test/*.class 

comの親フォルダにあります。絶対パス(あなたのやり方)を提供することによって、クラスファイルは正しくパッケージ化されます。

+0

または、http://stackoverflow.com/a/18972208/2868801のように '-C'を使用してください。また、マニフェストに 'Main-class'だけが必要なときは、' -m'とマニフェストファイルの代わりに '-e'とclassnameを使うことができます。 –

+0

@ dave_thompson_085それは良い提案ですが、OPの問題は、クラスが正しくパッケージ化されていないことです。単にクラスのパスを相対パスに変更するだけで十分です。その他は同じままです。 –

+0

相対パスを完全に変更しても機能しませんでした。Kedarと@ThierryB – Wecherowski

1

まず、Eclipse IDEを使用している場合にのみ、Fat Jar Pluginのようなツールがあり、ビルドのパッケージ化に役立ちます。

第2に、依存関係を処理し、必要なパッケージをすべてビルドするためのMavenがあります。あなたの場合、私はApache Maven Jar Pluginを探します。

最後に、あなたがやろうとしたように、コマンドラインに行く古い学校の方法。 Eliott Frischがあなたの質問で言ったように、jar cfm test.jar manifest.txt <full_path>/out/のメインクラスにフルパスを指定する必要はありません。 manifest.txtがすでにパッケージ情報を提供しているからです!

関連する問題