2

あなたの助けを借りて、Java での最初のプロジェクトを完成させることができました。今、私はjarを作成し、jarからアプリケーション(Javaプロジェクト - 依存関係として別のプロジェクト(コンソールアプリケーション)を持つプレーンなコンソールアプリケーションです)を実行したいと考えています。

右クリック - エクスポート - jar を作成して、eclipse で jar を作成しました。cmd からこの jar を実行しようとすると、エラーが発生します (以下は、取得しているエラーです)

no main manifest attribute, in AAA.jar

私はエラーをグーグルで検索しました-それらのほとんどはマニフェストファイルを作成する必要がありました。srcレベルに等しいプロジェクトで以下のようなマニフェストファイルを作成しました

Manifest-Version: 1.0
Main-Class: com.Pacakename.mainclass
Class-Path: log4j-1.2.16.jar db2jcc.jar db2jcc_license_cu.jar

次に、J は jar を再度実行しようとしましたが、今回は、クラスにメイン メソッドがある場合にメイン メソッドがないと表示されます

マニフェストを作成するための明確な手順を説明してください(マニフェストファイルがある場所のフォルダー構造を見せてくれると本当に助かります)

4

3 に答える 3

4

次のディレクトリ構造があると仮定します。

MyJavaProject
   |-src 
      |- com
          |- example
               |- Main.java

このようなプロジェクトをコマンドラインでコンパイルするには (外部依存関係なし)、コマンドを呼び出す必要があります

$ cd MyJavaProject
$ mkdir bin         //to separate *.class file from source files
$ javac -d bin src\com\example\Main.java

Main.classこれにより、ディレクトリにファイルが作成されますbin。*.jarファイルにパックするには、次のことができます:1)バイナリファイルでjarを作成し、cmdでメインクラスを指定します2)マニフェを作成してjarに埋め込みます(これに焦点を当てます)

META-INFその下srcとその中にディレクトリを作成する必要がありますcreate MANIFEST.mffile

マニフェストは次のようになります。

Manifest-Version: 1.0
Created-By: <Your info>
Main-Class: com.example.Main

マニフェストの最後に空行を追加することを忘れないでください!!

この場合、Manifest-Version属性、Created-By属性、実行するメイン クラスの完全修飾名を属性に指定しMain-Classます。

このマニフェスト ファイルとバイナリ ファイルを使用して Jar を作成するには、コマンドを呼び出します。

$ cd bin
$ jar cfm MyJavaProject.jar ..\src\META-INF\MANIFEST.MF .

これにより、呼び出された新しいjarが作成されMyJavaProject.jar、マニフェストが使用されます

プロジェクトが外部クラスまたは jar に依存している場合は、コンパイル時にそれらをクラスパスに追加し (-cpオプション)、別の行を追加します。Manifest

ClassPath: path/to/dependent/jars/jar.jar

それを再コンパイルして新しいjarを作成し、Javaクエストを楽しんでください:)

マニフェストの詳細については、ドキュメントを参照してください。

PS: cmd ラインから jars,amnifest を操作するのは見苦しいかもしれませんが、ava のような概念をいくつか教えてくれます。スキップしたい場合は、Apache MavenまたはApache Antの使用を検討してください。

于 2013-06-13T21:37:44.437 に答える
0

Eclipse を使用している場合は、「エクスポート」 --> Runnable jar を使用して目標を達成できます。その場合、Eclipse はこの実行構成を実行可能な jar の一種の青写真として使用するため、プロジェクトに有効な実行構成が必要です。

この場合、Eclipse がマニフェストを作成します。

于 2013-06-13T20:43:21.310 に答える