この記事では、JAR コマンドの使用法を詳しく説明します。これは、誰もが jar コマンドの使用法を学習して要約するのに役立ちます。詳細は以下のとおりです。
JAR パッケージは、Java 独自の圧縮ドキュメントです。実際、誰もが .zip パッケージとして理解できます。もちろん違いはあります。JAR パッケージには META-INF/MANIFEST.MF ファイルが存在します。JAR パッケージが見つかると、それが自動的に生成されます。
JAR パッケージは、JDK インストール ディレクトリ /bin/jar.exe コマンドによって生成されます。JDK をインストールしてパスを設定すると、通常は lib/tool.jar 内のクラスが使用されます。ツールパッケージ。これらの詳細については心配しないでください。
それがどのように使用されるかを見てみましょう:
1.jarコマンドパラメータ:
jar コマンド形式: jar {ctxuf}[ vme 0 M i ][-C directory] ファイル名...
その中で、4 つのパラメータ {ctxu} のいずれかを選択する必要があります。 [vfme 0 M i ] はオプションのパラメータであり、ファイル名も必須です。
-c は jar パッケージを作成します
-t は、jar 内の内容のリストを表示します。
-x jar パッケージを解凍します
-u は jar パッケージにファイルを追加します
-f は、jar パッケージのファイル名を指定します。
-v は詳細レポートを生成し、標準デバイスに出力します。
-m は、manifest.mf ファイルを指定します (jar パッケージとその内容については、manifest.mf ファイルでいくつかの設定を行うことができます)。
-0 は、jar パッケージの生成時にその内容を圧縮しません。
-M すべてのファイルに対してマニフェスト ファイル (Manifest.mf) を生成しません。このパラメーターは、-m パラメーターを無視する設定と同じです。
-i は、指定された jar ファイルのインデックス ファイルを作成します
-C は、対応するディレクトリに移動して jar コマンドを実行することを意味します。これは、そのディレクトリに cd して、-C を指定せずに jar コマンドを実行するのと同じです。
2. Jar の使用例:
(1)jarパッケージの作成
jar cf hello.jar hello
テスト ディレクトリを使用して hello.jar パッケージを生成します。hello.jar が存在する場合は上書きされます。
(2) 梱包工程の作成・表示
jar cvf hello.jar hello
hello ディレクトリを使用して hello.jar パッケージを作成し、作成プロセスの例を示します。
E:/>jar cvf hello.jar hello
マニフェスト
追加: hello/(読み取り = 0) (書き込み = 0) (0% 保存)
追加: hello/TestServlet2.class (読み取り = 1497) (書き込み = 818) (45% 圧縮)
追加: hello/HelloServlet.class (読み取り = 1344) (書き込み = 736) (45% 圧縮)
追加: hello/TestServlet1.class (読み取り = 2037) (書き込み = 1118) (45% 圧縮)
(3) jar パッケージの表示:
jar tvf hello.jar hello.jar パッケージの内容を表示します。指定された jar パッケージは実際に存在する必要があります。存在しない場合、FileNoutFoundException が発生します。
(4) jar パッケージを解凍します。
jar xvf hello.jar
hello.jarを現在のディレクトリに解凍します。
(5) ファイルを jar に追加します。
jar uf hello.jar HelloWorld.java
HelloWorld.java を hello.jar パッケージに追加
(6) 非圧縮コンテンツ jar パッケージを作成します。
jar cvf0 hello.jar *.class
現在のディレクトリ内のすべての .class ファイルを使用して、非圧縮の jar パッケージを生成します。
(7)manifest.mf ファイルを使用して jar パッケージを作成します。
jar cvfm hello.jar マニフェスト.mf hello
作成されたjarパッケージにはMETA-INFディレクトリが追加され、META-INFディレクトリにはmanifest.mfファイルが追加されます。manifest.mfの役割については後述します。
(8) マニフェスト.mf ファイルを無視します。
jar cvfM hello.jar hello
生成されたjarパッケージには、META-INFディレクトリとmanifest.mfファイルは含まれません。
(9) -C アプリケーションを追加します。
jar cvfm hello.jar mymanifest.mf -C hello/
これは、hello ディレクトリに切り替えてから、jar コマンドを実行することを意味します。
(10)-i は、jar ファイルのインデックス リストを生成します。
jar パッケージの内容が非常に優れている場合は、そのインデックス ファイルを生成できますが、これは非常に問題がないようです。
ジャー、こんにちは。ジャー
このコマンドを実行すると、hello.jar パッケージの META-INF フォルダーに INDEX.LIST という名前のインデックス ファイルが生成され、jar パッケージ名が先頭にあるリストが生成されます。
(11) 解凍リストをエクスポートします。
jar tvf hello.jar >hello.txt jar パッケージのサイズが大きく、解凍の詳細なプロセスを表示したい場合は、この時点で画面情報が表示され、リストをファイルに出力できます。ゆっくり鑑賞してください!
(12)jar -cvf hello.jar hello/*
たとえば、元のディレクトリ構造は次のとおりです。
こんにちは
|---com
|---組織
本来は com ディレクトリと org ディレクトリのみをパッケージ化したいと考えていましたが、この時点では jar コマンドも hello とともにパッケージ化されます。誰もがこれに注意する必要があります。 jar コマンドで生成された圧縮ファイルには、その後にディレクトリが含まれます。 hello ディレクトリに入り、jar コマンドを実行する必要があります。
注: ファイル名「manifest.mf」はユーザーが任意に指定できますが、jar コマンドは「Manifest.mf」のみを認識するため、ユーザーが指定したファイル名に応じて変換されます。
3.Manifest.mf ファイルの記述ルール:
manifest.mf を記述するときは、いくつかの点に注意する必要があります。これは非常に要求が厳しいものです。誰がこれをケチにするのでしょうか。
(1) 空行やスペースを入れられない場合、最初の行を空行にすることはできません(最初の行の前に空行を入れることはできません)。行間に空行を入れることはできません。行末にスペースがあります。
(2) 空白行が必要で、最終行も空白行である必要があります(内容を入力した後に改行を追加するだけです)。
(3) スペースが必要です
key: 値はセミコロンの後にスペースを入れて記述する必要があります
4.jarパッケージでクラスを使用する方法
直感的な小さな例を書いてみましょう。
パブリック最終クラス パーソン{ public static int age() { return 30;-> javac 人.java->jar cvf 人.jar 人.クラス
上記ファイルをjarパッケージ化する
それを呼び出す別のクラスを作成します。
public class MyAge{ public static void getAge() { System.out.println(person.age());->javac MyAge.java ->java -classpath person.jar MyAge
興味のある読者はこのプログラムをデバッグできます
5. 実行可能なjarパッケージを作成する
自分でプログラムを書いていると、時間が経つとクラスが多くなり、どれがメインのクラスなのかさえわからなくなることがあります。また、使用する画像やその他のファイルも多くなり、混乱してしまうことがあります。現時点では、それを実行可能な jar パッケージにすることを検討できます。
(1)manifest.mf ファイルを編集し、次の行を追加します。
メインクラス: MyApplet
注: Main-Class のサイズが決定され、コロンの後のスペースと MyApplet の後の Enter を入力して保存する必要があります。
(2) 梱包
jar cvfm FirstApplet.jar マニフェスト.mf MyApplet.class
注:manifest.mf は、Mani-Class:MyApplet ファイルが保存されているクラス パス (例: hello.Hello) またはファイル名 (アプレット) として指定されます。
(3) 実行可能jarの利用
java -jar FirstApplet.jar
<applet></applet> でも使用できます。
<applet code=MyApplet archive=FirstApplet.jar width=200 height=100></applet>
注: クラスは指定されません。必要に応じてクラス名とパッケージ名を決定できます。
6. 独自のクラスを拡張する
JDK インストール ディレクトリ /jre/lib/ext ディレクトリでは、独自のクラス ファイルを .jar パッケージに入力してこのディレクトリに配置することができます。これは ExtClassLoader クラスによってインストールされます。クラスローダーはロードを担当し、ExtClassLoader クラスローダーは AppClassL です。ローダー クラス ローダーの親ローダーである AppClassLoader は、主に CLASSPATH パスの下にファイルをロードする役割を果たします。Java で使用されるメカニズムは親ローダーを委任することであるため、このディレクトリに格納されている jar 内のクラス ファイルには、設定を変更すると、クラスローダーが通常のロードを見つけることができます。とても便利ですよね...
.jar がアプレット アプリケーション用の場合は、jar パッケージにパッケージ化する前に、manifest.mf に次の 2 行を追加できます。
クラスパス: FirstApplet.jarクラスパス: SecondApplet.jarメインクラス: MyApplet
注: クラスパスは複数の項目に設定できます。jar パッケージ名を直接記述するだけです。 Main-Class は主に、jar 内に複数の .class クラス ファイルがある場合に使用されます。Java はどれがメイン クラスであるかを認識しないため、jar パッケージ内にクラスが 1 つしかない場合は、当然それを指定する必要があります。指定する必要はありません。
Java がクラスを呼び出す順序: java/lib/ext のクラス ---> Manifest.mf で指定されたクラス --> 現在のディレクトリのクラス --> set CLASSPATH で指定されたクラス。
7. URL ネットワーク上で jar パッケージを呼び出します。
(1)jarパッケージのURL生成
URL u=新しい URL("jar:"+"FirstApplet.jar"+!/");
(2) jarURLConnectionオブジェクトの作成
JarURLConnection juc=(JarURLConnection)u.openConnection();
(3) jarパッケージ内のメインクラス名を返す
属性 attr=juc.getMainAttributes();String name=attr.getValue("Mani-Class");
Mani-Class 属性が jar パッケージの manifest.mf に正しく設定されていることを必ず確認してください。この場合も、ルールに注意する必要があります。
(4) 取得したメインクラス名を元にClassオブジェクトを作成する
クラス c=Class.forName(名前);
(5) Class オブジェクトに従って main メソッドを呼び出します。
メソッド cm=c.getMethod("main",new Class[]{String.class}); cm.invoke(null,new Object[]{});
ヒント: 上記では、Reflection リフレクション メカニズムに関する知識を使用しています。複数のリフレクション メカニズムに興味がある場合は、java.lang.reflect パッケージの関連コンテンツを確認してください。
8. JAR コマンドの使用に関するヒント:
(1)jarは圧縮されたZIPファイルを作成します
jar cvfM TestZIP.jar テスト
META-INF 関連のコンテンツを生成しないように M パラメータを追加し、TestZIP.jar を TestZIP.zip に変更するだけです。非常に簡単ではないでしょうか。
(2) WinRAR を使用して .jar ファイルを解凍します。
上で述べたように、JAR ファイルは特殊な圧縮ファイルであるため、通常使用される解凍ツールを使用して解凍することができます。解凍方法については説明する必要はありません。
(3) WinRAR を使用して .jar ファイルを生成する
JAR パッケージと ZIP パッケージの主な違いは、JAR パッケージには追加の META-INF ディレクトリがあることであるとすでに述べました。関連するファイルを作成するだけで済みます。ディレクトリを作成して圧縮します。
ディレクトリ構造は次のとおりです。
テストジャー
|--META-INF
|--manifest.mf
|--関連するクラス ファイル