Heim  >  Artikel  >  Java  >  Ausführliche Erläuterung der Anwendungsbeispiele des JAR-Befehls in JAVA

Ausführliche Erläuterung der Anwendungsbeispiele des JAR-Befehls in JAVA

怪我咯
怪我咯Original
2017-07-02 10:41:502447Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung des JAR-Befehls vorgestellt, was sehr praktisch ist. Freunde, die ihn benötigen, können darauf zurückgreifen.

In diesem Artikel wird die Verwendung des JAR-Befehls ausführlich beschrieben, was für alle hilfreich ist um die Verwendung des jar-Befehls zu erlernen und zusammenzufassen. Die Details sind wie folgt:

Das JAR-Paket ist eine einzigartige komprimierte Datei in Java. Tatsächlich kann es jeder als .zip-Paket verstehen. Natürlich gibt es einen Unterschied. Es gibt eine META-INFMANIFEST.MF-Datei im JAR-Paket. Wenn Sie das JAR-Paket finden, wird es automatisch generiert.

Das JAR-Paket wird durch den Befehl binjar.exe im JDK-Installationsverzeichnis generiert. Wenn wir das JDK installieren und den Pfad festlegen, können wir den Befehl jar.exe normal verwenden Werkzeugpaket Art. Machen Sie sich über diese Details keine Sorgen.

Sehen wir uns an, wie man es verwendet:

1.jar-Befehlsparameter:

jar-Befehlsformat: jar {c t x u f }[ v m e 0 M i ][-C-Verzeichnis] ​​Dateiname...

Unter diesen muss {ctxu} einen der vier Parameter auswählen. [v f m e 0 M i ] ist ein optionaler Parameter und der Dateiname ist ebenfalls erforderlich.

-c JAR-Paket erstellen
-t Inhaltsliste im JAR anzeigen
-x JAR-Paket entpacken
-u Dateien zum JAR-Paket hinzufügen
-f Angeben Das JAR-Paket Der Dateiname
-v generiert einen detaillierten Bericht und gibt ihn an das Standardgerät aus.
-m gibt die Datei manifest.mf an (Die Datei manifest.mf kann einige Einstellungen für das JAR-Paket und seine Dateien vornehmen Inhalt)
-0 komprimiert den Inhalt des JAR-Pakets nicht, wenn es generiert wird
-M generiert keine Manifestdatei (Manifest.mf) für alle Dateien. Dieser Parameter ist derselbe wie die Einstellung, die den -m-Parameter
-i ignoriert. Erstellen Sie eine Indexdatei für die angegebene JAR-Datei
-C bedeutet, in das entsprechende Verzeichnis zu wechseln, um den JAR-Befehl auszuführen, was äquivalent ist cd in dieses Verzeichnis kopieren und dann ohne - C den JAR-Befehl ausführen

2.jar-Verwendungsbeispiele:

(1) JAR-Paket erstellen

jar cf hello.jar hello

Verwendung Das Testverzeichnis generiert das Paket hello.jar. Wenn hello.jar vorhanden ist, wird es überschrieben

(2) Erstellen und Anzeigen des Verpackungsprozesses

jar cvf hello.jar hello

Verwenden Sie das Hallo-Verzeichnis, um das Hallo-.jar-Paket zu erstellen und zeigen Sie den Erstellungsprozess
Beispiel:

E:\>jar cvf hello.jar hello

Markieren Sie das Manifest
Hinzufügen: hallo/ (einlesen = 0) (ausschreiben = 0) (0 gespeichert %)
Hinzufügen: hello/TestServlet2.class (lesen = 1497) (ausschreiben = 818) (komprimiert um 45 %)
Hinzufügen: hello/HelloServlet.class (einlesen = 1344) (ausschreiben = 736) (komprimiert um 45 %)
Hinzugefügt: hello/TestServlet1.class (einlesen = 2037) (ausschreiben = 1118) (komprimiert um 45 %)

(3) JAR-Paket anzeigen:

jar tvf hello.jar Den Inhalt des hello.jar-Pakets anzeigen
Das angegebene JAR-Paket muss tatsächlich vorhanden sein, sonst tritt FileNoutFoundAusnahme auf .

(4) Entpacken Sie das JAR-Paket:

jar xvf hello.jar

Entpacken Sie hello.jar in das aktuelle Verzeichnis

(5) Hinzufügen zur JAR-Datei:

jar uf hello.jar HelloWorld.java

HelloWorld.java zum hello.jar-Paket hinzufügen

(6) JAR-Paket mit unkomprimiertem Inhalt erstellen:

jar cvf0 hello.jar *.class

Verwenden Sie alle .class-Dateien im aktuellen Verzeichnis, um ein unkomprimiertes JAR-Paket zu generieren

(7) Erstellen Sie ein JAR-Paket mit der manifest.mf-Datei:

jar cvfm hello.jar manifest.mf hello

Das erstellte JAR-Paket verfügt über ein zusätzliches META-INF-Verzeichnis und die META-INF-Stoppaufzeichnung verfügt über eine zusätzliche manifest.mf-Datei. Was die Rolle von manifest.mf betrifft, werden wir später erwähnen.

(8) Manifest.mf-Datei ignorieren:

jar cvfM hello.jar hello

Das generierte JAR-Paket enthält nicht das META-INF-Verzeichnis und die manifest.mf-Datei

(9 ) plus -C-Anwendung:

jar cvfm hello.jar mymanifest.mf -C hello/

bedeutet, in das Hallo-Verzeichnis zu wechseln und dann den JAR-Befehl auszuführen

(10)-i generiert eine Indexliste für die JAR-Datei:

Wenn der Inhalt in einem JAR-Paket sehr gut ist, können Sie eine Indexdatei dafür generieren, was sehr problemlos zu sein scheint.

jar i hello.jar

Nach der Ausführung dieses Befehls wird eine Indexdatei mit dem Namen INDEX.LIST im Ordner META-INF des Pakets hello.jar generiert. Es wird eine Liste mit dem Namen des obersten JAR-Pakets generiert.

(11) Dekomprimierungsliste exportieren:

jar tvf hello.jar >hello.txt   如果你想查看解压一个jar的详细过程,而这个jar包又很大,屏幕信息会一闪而过,这时你可以把列表输出到一个文件中,慢慢欣赏!
 
 (12)jar -cvf hello.jar hello/*

   例如原目录结构如下:
   hello
     |---com
     |---org
 
你本想只把com目录和org目录打包,而这时jar命令会连同hello目洋也一块打包进。这点大家要注意。jar命令生成的压缩文件会包含它后边出的目录。我们应该进入到hello目录再执行jar命令。
 
注意:manifest.mf这个文件名,用户可以任指定,但jar命令只认识Manifest.mf,它会对用户指定的文件名进行相应在的转换,这不需用户担心。
 
三.Manifest.mf文件编写规则:
 
 manifest.mf的编写一定要注意一些细节,它是很苛刻的,我在此也载过不少跟头,谁让它这么小气呢,没办法,所以专门给大家列出来。
 
(1) 不能有空行和空格的地方
    第一行不可以是空行( 第一行的行前不可以有空行),行与行之间不能有空行,第行的行尾不可以有空格
(2) 一定要有空行的地方
最后一行得是空行(在输完你的内容后加一个回车就OK)

(3) 一定有空格的地方
     key: value       在分号后面一定要写写一个空格
 
四.怎样使用jar包中的类
 
还是写个小例子吧,这样直观!

public final class Person
{
   public static int age()
   {
   return 30;
   }
}
-> javac Person.java
->jar cvf person.jar Person.class

将上面的文件打成一个jar包
 
再写一个类对其进行调用:

public class MyAge
{
      public static void getAge()
   {
         System.out.println(Person.age());
      }
}
->javac MyAge.java
 ->java -classpath person.jar MyAge


感兴趣的读者可以调试一下这个程序

五.创建可执行jar包

 有时自己写个程序,类一大堆,时间一长连自己都不知道那个是主类,而且有可能用到图片或其它文件一大堆,看得也乱,这时你可以考虑把它做成一个可执行jar包...
 
(1) 编辑manifest.mf文件加入下面一行

Main-Class: MyApplet

注意:Main-Class的大小定,冒号后的空格,MyApplet后一定输入回车,然后保存。

(2) 打包

jar cvfm FirstApplet.jar manifest.mf MyApplet.class

注意:manifest.mf指定为存放Mani-Class: MyApplet文件的class路径(如:hello.Hello)或者文件名(applet)

(3) 可执行jar的使用

java -jar FirstApplet.jar

也可以082dedeb30a00d0e6e2cdb74a392fac30f47783e45a827c89a02ecd1506bec99中使用:

<applet code=MyApplet archive=FirstApplet.jar width=200 height=100>
</applet>

注意:类并没有给出,大家随便写一个就行,类名包名自己随意定,相应的更改就可以...
 
六.扩展自己的类
 
在JDK的安装目录\jre\lib\ext目录下,SUN为大家为我们扩展自己类的提供了方便,大家可以将自己的类文件打成.jar包放在此目录下,它由ExtClassLoader类装器负责进行装载,ExtClassLoader类装器是AppClassLoader类装载器的父装载器,AppClassLoader主要负责加载CLASSPATH路径下的文件,而在java中采用的又是委托父装载器的机制,所以此目录下存放的jar中的类文件不做任何的设置,类装载器就可以找到正常的加载,是不是很方便啊,呵...
 
如果你的.jar是给applet小应用程序看的,可以在打成jar包之前,在其manifest.mf加入下面两行。

Class-Path: FirstApplet.jar
Class-path: SecondApplet.jar
Main-Class: MyApplet

注意:Class-path可以设置多项,直接写jar包名既可。Main-Class主要当jar中有多个.class类文件时,java并不知道那个才是主类,所以要指定,如果jar包中只有一个类当然可以不指定。
 
Java调用类的顺序:java\lib\ext中的类--->Manifest.mf中指定的类-->当前目录中的类-->set CLASSPATH中指定的类。
 
七.调用URL网络上的jar包
 
(1) 生成jar包的URL

URL u=new URL("jar:"+"FirstAppplet.jar"+!/");

(2) 建立jarURLConnection对象

JarURLConnection juc=(JarURLConnection)u.openConnection();

(3) 返回jar包中主类的名字

Attributes attr=juc.getMainAttributes();
String name=attr.getValue("Mani-Class");

一定要确保你的jar包中的manifest.mf中已正确的设置了Mani-Class属性,再强调一下一定要注意规则。
 
(4) 根据得到的主类名创建Class对象

Class c=Class.forName(name);

(5) 根据Class对象调用其main方法:

Method cm=c.getMethod("main",new Class[]{String.class});
  cm.invoke(null,new Object[]{});

提示:上边用到了Reflection反射机制的相关知识,大家如果多反射机制有兴趣,可查看java.lang.reflect包中的相关内容.
 
八.JAR命令使用技巧:
 
(1) jar创建压ZIP文件

jar cvfM TestZIP.jar test

      加M参数为了不生成META-INF相关内容
然后将TestZIP.jar改为TestZIP.zip就可以,是不是很简单....

(2) 使用WinRAR解压.jar文件

上边我们已经说过了,说JAR文件是一种特殊的压缩文件,所以它当然可以用我们常用的一些解压     缩工具来解了,至于怎么解,这就不用我说了吧。

(3) 用WinRAR生成.jar文件

我们已经说过JAR包与ZIP包主要区别就是JAR包中多一个META-INF的目录,META-INF目录下有一个manifest.mf文件,我们只要建立好相关的目录一压缩就可以了。
目录的结构如下:

      TestJar
          |--META-INF
                |--manifest.mf
          |--相关的类文件

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Anwendungsbeispiele des JAR-Befehls in JAVA. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn