JARパッケージの実装
JARパッケージは、JARディレクティブを使用してパッケージ化できます。コマンドラインにJARを入力すると、jar指令のコンテンツを表示できます
前回のショーに示されている2つの例から、パッケージ化する2つの方法があります。 2つの違いは、定義したマニフェストマニフェストファイルを使用するかどうかです。最初の例はマニフェストファイルを使用してパッケージ化されていないため、最終生成されたJARパッケージのマニフェストファイルはデフォルトファイルです。この方法は、比較的単純なJARパッケージ構造に適しています。他のJARパッケージの依存関係はなく、生成されたJARパッケージは実行可能である必要はありません。この方法で生成されたJARパッケージは、プログラムエントリがマニフェストファイルで指定されていないため、 java -jar XXX.jarコマンドを使用して実行できません。 2番目のインスタンスは、比較的一般的なパッケージング方法です。つまり、カスタムマニフェストファイルを使用してパッケージに参加するため、パッケージに依存関係を追加し、 java -jar XXX.jarを実装するプログラムエントリを指定してJARパッケージを直接実行できます。
最初の単純なパッケージング方法
最も簡単なのは、現在のフォルダーにコンパイルされたクラスバイトコードファイルをパッケージ化および出力することです。例は次のとおりです。
3つのJavaファイル、test1.java test2.javaとmain.javaを書きます
public class test1 {public static void main(string [] args){} public void display(){system.out.println( "これはクラスtest1"); }}およびtest2.javaファイル
public class test2 {public static void main(string [] args){} public void display(){system.out.println( "これはクラスtest2"); }}main.java
public class main {public static void main(string [] args){for(string a:args){system.out.println( "gived parameter"+a); } test1 t1 = new test1(); t1.display(); test2 t2 = new test2(); t2.display(); }}これら3つのファイルをコマンドラインにコンパイルし、Javacコマンドを使用してコンパイルします。
JAR指令を使用して、コンパイルされたクラスファイルをパッケージ化する
追加リストは、パッケージング中に表示されます。減圧ツールを使用して、生成されたtest.jarパッケージを開くと、次の構造を確認できます。
コンパイルされた3つのクラスファイルに加えて、Manifest.mf(リストファイル)を含む追加のメタINFフォルダーがあります。後で説明するように、このファイルの役割は非常に重要です。最初にその内容を見てみましょう
非常にシンプルなマニフェスト、マニフェストバージョンとJavaバージョンのみが含まれています。
java -jar test.jarの実行この時点では、次の効果があります。
メインリスト属性エラーは報告されていません。これは、デフォルトのマニフェストを使用して最初の方法を使用してJARを生成するためです。デフォルトのマニフェストはプログラムエントリを指定していないため、エラーが発生します。
JARパッケージのマニフェストファイルを直接変更できます(減圧ツールを開き、変更後に保存)、次の効果に変更できます。
java -jar test.jar再度実行した後、プログラムは正しいコンテンツを入力します。
メインクラス属性はマニフェストファイルに追加され、プログラムエントリを指定します。これにより、JARファイルの直接実行が実現されます。
したがって、デフォルトのマニフェストを使用すると、JARファイルを直接実行できません。定義するマニフェストファイルを使用してパッケージ化するか、パッケージ内のマニフェストファイルを変更します。
梱包する2番目の方法
2番目のパッケージ方法はより一般的です。一般的に言えば、Javaファイルの最初の行はpackage XXX;つまり、パッケージ名も、コンパイルされたクラスファイルのパスを決定します。コンパイルおよびパッケージ化される複数のJavaファイルがあり、異なるパッケージ名がある場合、最初の方法に従ってパッケージ化するときに1つのファイルを記述することは非常に非現実的であるため、2番目の方法があります。クラスファイルに存在するすべてのディレクトリをパッケージ化するすべてのディレクトリとルートフォルダー(FOOなど)に依存関係JARパッケージを置き、マニフェストマニフェストファイルを書き込み、プログラムの入り口とその他の依存関係JARパッケージを指定します。コマンドの実行において:
上記のコマンドにfoo/フォルダーの後ろにスペースとドットがあることに注意してください
以下の例を見てみましょう
同じことは、test1.java、test2.java、main.javaですが、それぞれに独自のパッケージ名があります。
パッケージcn.mytest1; public class test1 {public static void main(string [] args){} public void display(){system.out.println( "this is class test1"); }}パッケージcn.mytest2; public class test2 {public static void main(string [] args){} public void display(){system.out.println( "this is class test2"); }}パッケージcn.mymain; Import cn.mytest1.test1; import cn.mytest2.test2; public static void main(string [] args){for(string item:args){system.out.println( "passing parameter"+item); } test1 t1 = new test1(); test2 t2 = new test2(); t1.display(); t2.display(); }}また、Javacディレクティブを使用してコンパイルされた3つのクラスファイルは、パッケージ名が異なるため、異なるパスに存在します。 FOOフォルダーにクラスファイルを含むすべてのコンパイルされたフォルダーを:
次に、fooの外にマニフェストファイルを書きます。
マニフェストの内容は次のとおりです。
注:マニフェストファイルの最後の行は空の行です。
コマンドラインからコマンドを実行します: jar cvfm test.jar MANIFEST.MF -C foo/ .
JARパッケージをコマンドラインで直接実行できるかどうかをテストするには、コマンドjava -jar test.jarを使用します
正しくパッケージ化し、JARを正常に実行します。
マニフェストファイルの紹介
上記の2つの例を通して、JARパッケージにマニフェストファイルが必要であることがわかります。マニフェストファイルは、パッケージ化されたJARファイルの詳細情報を説明し、パッケージ化されたMeta-INFフォルダーに存在します。単純なマニフェストファイルの主なコンテンツは次のとおりです。
主なことは、JARパッケージを作成する際に、マニフェストバージョンのメインクラスクラスパスの3つの属性が非常に重要であることです。マニフェストバージョンはバージョン番号です。それに応じて書き込むだけです。メインクラスはJARパッケージのエントリプログラムで、ランニングクラスのフルネームを指定します(パッケージ名を含める必要があります)。このようにして、 java -jar name.jarを使用してJarパッケージを直接実行できます。 3番目のクラスパスは、パッケージング時に依存する必要がある他のJARパッケージを指します。パッケージングの場合、プログラムには他のJARパッケージも含まれている可能性があるため、依存関係を追加する必要があります。
コロンと各マニフェスト属性の含有量の間にスペースがあり、執筆後に最後に空白行がある必要があります。そうしないと、ランタイムにメインリスト属性が見つからないというエラーがあります。
まとめ
JARファイルのパッケージングで間違いを犯すのは簡単なことは、属性のコロンとコンテンツの間のスペースが少ないスペース、クラスパスの依存関係の追加、依存関係が多すぎる、それぞれのラインの最初の依存関係のない依存関係の間のスペースがない場合、ファイルを書くとき、ファイルを書くときなど、依存関係が多すぎるなどのスペースの間のスペースがあります。パッケージング。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。