jar包的命令及实例(详)

来源:互联网 发布:手机音乐合成剪辑软件 编辑:程序博客网 时间:2024/06/05 18:43
1.java简介
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式健壮性安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序Web应用程序分布式系统嵌入式系统应用程序等 。
(详细链接:http://baike.baidu.com/item/java/85979?fr=aladdin&fromtitle=Java语言&fromid=4148931)

2.下载并配置java环境变量
1)JDK下载官网:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html
2)java环境变量的配置:http://blog.csdn.net/gray_key/article/details/64264675

3.Linux下的第一个程序
//使用vi编辑器,在linux环境下编写第一个java程序
public class Hello{
  public static void main(String agrs[]){
  System.out.println("Hello Word!");
  }
}

4.javac命令
用法:javac <选项> <源文件>其中,可能的选项包括:  
-g                           生成所有调试信息 
-g:none                      不生成任何调试信息  
-g:{lines,vars,source}       只生成某些调试信息  
-nowarn                      不生成任何警告  
-verbose                     输出有关编译器正在执行的操作的消息 
-deprecation                 输出使用已过时的 API 的源位置 
-classpath <路径>            指定查找用户类文件和注释处理程序的位置 
-cp <路径>                   指定查找用户类文件和注释处理程序的位置   
-sourcepath <路径>           指定查找输入源文件的位置  
-bootclasspath <路径>             覆盖引导类文件的位置 
-extdirs <目录>                         覆盖安装的扩展目录的位置 
-endorseddirs <目录>               覆盖签名的标准路径的位置 
-proc:{none,only}                       控制是否执行注释处理和/或编译。  
-processor <class1>[,<class2>,<class3>...]  要运行的注释处理程序的名称;绕过默认的搜索进程 
-processorpath <路径>        指定查找注释处理程序的位置  
-d <目录>                             指定存放生成的类文件的位置 
-s <目录>                             指定存放生成的源文件的位置 
-implicit:{none,class}            指定是否为隐式引用文件生成类文件 
-encoding <编码>                 指定源文件使用的字符编码  
-source <版本>                     提供与指定版本的源兼容性
-target <版本>                       生成特定 VM 版本的类文件 
-version                                 版本信息 
-help                                      输出标准选项的提要
-Akey[=value]                        传递给注释处理程序的选项 
-X                                           输出非标准选项的提要 
-J<标志>                                直接将 <标志> 传递给运行时系统



5.javac命令常用实例
javac  -verbose   Test.java              生成详细信息javac –verbose d:\FirstProgram.java          指定源文件的目录javac -classpath code code\Test.javajavac –cp   code code\Test.javajavac -d e:\    d:\FirstProgram.java            指定class文件输出到一个特定的目录javac –version                              查看编译器的版本javac –help                              查看帮助信息



6.java命令
-classpath 类路径    -cp 类路径        指定一个用于查找类文件的列表,它由目录、 JAR 归档文件和 ZIP 归档文件组成。         类路径项用分号 (;) 分隔。指定 -classpath 或 -cp 将覆盖 CLASSPATH 环境变量的所有设置。-classpath 或 -cp 与 java 或 javaw 一起使用时用于指定用户类和自举类的类路径。-classpath 或 -cp 与 oldjava 或 oldjavaw 一起使用时仅用于指定用户类的类路径。如果不使用 -classpath 和 -cp,且没有设定 CLASSPATH ,则用户类路径由当前目录 (.) 构成。-D属性=值     设置系统属性的值。 -jar     执行封装在 JAR 归档文件中的程序。第一个参数是 JAR 归档文件的名称而不是启动类名.启动类由 Main-Class 清单头指定。  JAR 文件是所有用户类的源,其它的用户类路径设置将被忽略。-verbose    -verbose:class        显示每个所加载的类的信息。    -verbose:gc        报告每个垃圾收集事件。verbose:jni        报告有关本地方法的使用和其它 Java 平台相关代码接口活动的信息。   -version        显示版本信息并退出。   -?    -help        显示用法信息并退出。    -X        显示非标准选项的有关信息并退出。



7.java命令常用实例
Java FirstProgram   执行当前目录下的java文件
java -classpath d:\         FirstProgram   执行指定类目录下的文件
Java –verbose      -classpath d:\         FirstProgram     查看加载及执行的详细信息
Java –verbose      -classpath d:\         FirstProgram    >d:\view.txt   输出到指定的文件
Java –version  查看版本
java com.mashen.FirstProgram   执行带包名的java文件
java -jar c:/temp/bin/test.jar    执行jar包
java -classpath .;log4j-api-2.4.jar;log4j-core-2.4.jar;./src TestLog
java -classpath .;log4j-api-2.4.jar;log4j-core-2.4.jar;./src TestLog   执行对jar包有依赖关系的文件

8.jar命令
jar命令格式:jar  {ctxu}[vfm0Mi]  [jar-文件]  [manifest-文件]  [-C  目录]  文件名  ... 
其中{ctxu}这四个参数必须选选其一。[v f m e 0 M i ]是可选参数,文件名也是必须的。
选项: -c  创建一个jar包-t 显示jar中的内容列表-x 解压jar包-u 添加文件到jar包中-f 指定jar包的文件名-v  生成详细的报造,并输出至标准设备-m 指定manifest.mf文件.(manifest.mf文件中可以对jar包及其中的内容作一些一设置)-0 产生jar包时不对其中的内容进行压缩处理-M 不产生所有文件的清单文件(Manifest.mf)。这个参数与忽略掉-m参数的设置-i  为指定的jar文件创建索引文件-C 表示转到相应的目录下执行jar命令,相当于cd到那个目录,然后不带-C执行jar命令



9.一般属性
1)Manifest-Version 用来定义manifest文件的版本,例如:Manifest-Version: 1.0
2)Created-By 声明该文件的生成者,一般该属性是由jar命令行工具生成的, 例如:Created-By: Apache Ant 1.5.1
3)Signature-Version 定义jar文件的签名版本4. Class-Path 应用程序或者类装载器使用该值来构建内部的类搜索路径

10.应用程序的相关属性
Main-Class
定义jar文件的入口类,该类必须是一个可执行的类,一旦定义了该属性即可通过 java -jar x.jar来运行该jar文件


11.综合实例
[root@localhost zengbiao]# vi One.java vi编辑.java文件
public class One{
public static void main(String agrs[]){
System.out.println("This is One.");
}
}
[root@localhost zengbiao]# vi Two.java
public class Two{
public static void main(String agrs[]){
System.out.println("This is Two.");
}
}
[root@localhost zengbiao]# javac One.java javac编译.java文件
[root@localhost zengbiao]# javac Two.java
[root@localhost zengbiao]# java One
This is One.
[root@localhost zengbiao]# java Two java运行.class文件
This is Two.
[root@localhost zengbiao]# ll
total 16
-rw-r--r--. 1 root root 412 Mar 24 07:15 One.class
-rw-r--r--. 1 root root 102 Mar 24 07:15 One.java
-rw-r--r--. 1 root root 412 Mar 24 07:16 Two.class
-rw-r--r--. 1 root root 102 Mar 24 07:16 Two.java
[root@localhost zengbiao]# jar -cvf dada.jar One.class Two.class
-cvf 创建一个jar包的同时将两个.class文件放进去
[root@localhost zengbiao]# jar -tvf dada.jar
-tvf 查看jar包里面的内容
0 Fri Mar 24 07:20:44 CST 2017 META-INF/
68 Fri Mar 24 07:20:44 CST 2017 META-INF/MANIFEST.MF
创建jar包的时候默认生成一个META-INF文件夹及里面的MANIFEST.MF文件
该.MF文件主要包含jar包的相关信息(属性),如:Manifest-Version,Created-By,
Signature-Version,Class-Path。
若是不想生成META-INF文件夹及里面的MANIFEST.MF文件,则在创建jar包时,
在-cvf参数选项中加多一个大写M,即将-cvf改成-cvfM。
412 Fri Mar 24 07:15:26 CST 2017 One.class
412 Fri Mar 24 07:16:58 CST 2017 Two.class
[root@localhost zengbiao]# java -cp dada.jar One -cp进入jar包中,运行.class文件
This is One.
[root@localhost zengbiao]# java -cp dada.jar Two
This is Two.
[root@localhost zengbiao]# jar -uvfe dada.jar One
-uvfe更新jar包,-u是更新的意思,-e参数是为了指定jar包中的主类,此代码中指定主类为One.
updated manifest
[root@localhost zengbiao]# java -jar dada.jar
-jar 由于指定了jar包中的主类,java运行jar包时直接运行主类的.class文件。
而且,想要直接运行jar包,必须有指定的主类才行,若没指定主类,则运行报错。
This is One.
[root@localhost zengbiao]# jar -uvfe dada.jar Two 将jar包的主类改为Two
updated manifest
[root@localhost zengbiao]# java -jar dada.jar
This is Two.
[root@localhost zengbiao]# ll
total 24
-rw-r--r--. 1 root root 1143 Mar 24 07:28 dada.jar
-rw-r--r--. 1 root root 743 Mar 24 07:18 hehe.jar
-rw-r--r--. 1 root root 412 Mar 24 07:15 One.class
-rw-r--r--. 1 root root 102 Mar 24 07:15 One.java
-rw-r--r--. 1 root root 412 Mar 24 07:16 Two.class
-rw-r--r--. 1 root root 102 Mar 24 07:16 Two.java
[root@localhost zengbiao]# rm One.class Two.class
rm: remove regular file `One.class'? y
rm: remove regular file `Two.class'? y
[root@localhost zengbiao]# ll
total 16
-rw-r--r--. 1 root root 1143 Mar 24 07:28 dada.jar
-rw-r--r--. 1 root root 743 Mar 24 07:18 hehe.jar
-rw-r--r--. 1 root root 102 Mar 24 07:15 One.java
-rw-r--r--. 1 root root 102 Mar 24 07:16 Two.java
[root@localhost zengbiao]# jar -xvf dada.jar -xvf 将jar包进行解压缩。
created: META-INF/
inflated: META-INF/MANIFEST.MF
inflated: One.class
inflated: Two.class
[root@localhost zengbiao]# ll
total 28
-rw-r--r--. 1 root root 1143 Mar 24 07:28 dada.jar
-rw-r--r--. 1 root root 743 Mar 24 07:18 hehe.jar
drwxr-xr-x. 2 root root 4096 Mar 24 07:20 META-INF
-rw-r--r--. 1 root root 412 Mar 24 07:15 One.class
-rw-r--r--. 1 root root 102 Mar 24 07:15 One.java
-rw-r--r--. 1 root root 412 Mar 24 07:16 Two.class
-rw-r--r--. 1 root root 102 Mar 24 07:16 Two.java
[root@localhost zengbiao]# rm hehe.jar dada.jar 删除.jar文件
rm: remove regular file `hehe.jar'? y
rm: remove regular file `dada.jar'? y
[root@localhost zengbiao]# ll
total 20
drwxr-xr-x. 2 root root 4096 Mar 24 07:20 META-INF
-rw-r--r--. 1 root root 412 Mar 24 07:15 One.class
-rw-r--r--. 1 root root 102 Mar 24 07:15 One.java
-rw-r--r--. 1 root root 412 Mar 24 07:16 Two.class
-rw-r--r--. 1 root root 102 Mar 24 07:16 Two.java
[root@localhost zengbiao]#

[root@localhost zengbiao]# ll
total 12
drwxr-xr-x. 3 root root 4096 Mar 24 07:40 aa
-rw-r--r--. 1 root root 102 Mar 24 07:15 One.java
-rw-r--r--. 1 root root 102 Mar 24 07:16 Two.java
[root@localhost zengbiao]# vi One.java
package aa.bb; package 将类进行打包,aa/bb是打包的路径。
public class One{
public static void main(String agrs[]){
System.out.println("This is One.");
}
}
[root@localhost zengbiao]# vi Two.java
package aa.bb;
public class Two{
public static void main(String agrs[]){
System.out.println("This is Two.");
}
}
[root@localhost zengbiao]# javac One.java 由于.java文件重新编辑过,所以需重新编译
[root@localhost zengbiao]# javac Two.java
[root@localhost zengbiao]# mkdir aa 创建一个aa文件夹
[root@localhost zengbiao]# cd aa
[root@localhost aa]# mkdir bb 在aa文件夹下再创建一个bb文件夹
[root@localhost aa]# cd ../
[root@localhost zengbiao]# mv One.class aa/bb 将One.class文件移动到bb文件夹中
[root@localhost zengbiao]# mv Two.class aa/bb
[root@localhost zengbiao]# cd aa/bb
[root@localhost bb]# ll
total 8
-rw-r--r--. 1 root root 418 Mar 24 08:08 One.class
-rw-r--r--. 1 root root 418 Mar 24 08:09 Two.class
[root@localhost bb]# cd ../../
[root@localhost zengbiao]# jar -cvf hehe.jar aa 新建个jar包,并把aa文件夹放进去
added manifest
adding: aa/(in = 0) (out= 0)(stored 0%)
adding: aa/bb/(in = 0) (out= 0)(stored 0%)
adding: aa/bb/Two.class(in = 418) (out= 288)(deflated 31%)
adding: aa/bb/One.class(in = 418) (out= 287)(deflated 31%)
[root@localhost zengbiao]# ls
aa hehe.jar One.java Two.java
[root@localhost zengbiao]# jar -uvfe hehe.jar aa/bb/One 指定jar包的主类
updated manifest
[root@localhost zengbiao]# java -jar hehe.jar 直接运行jar包的主类
This is One.
[root@localhost zengbiao]# jar -uvfe hehe.jar aa/bb/Two
updated manifest
[root@localhost zengbiao]# java -jar hehe.jar
This is Two.
[root@localhost zengbiao]# ll
total 16
drwxr-xr-x. 3 root root 4096 Mar 24 08:09 aa
-rw-r--r--. 1 root root 1353 Mar 24 08:14 hehe.jar
-rw-r--r--. 1 root root 117 Mar 24 07:57 One.java
-rw-r--r--. 1 root root 117 Mar 24 07:58 Two.java
[root@localhost zengbiao]# rm -r aa
rm: descend into directory `aa'? y
rm: descend into directory `aa/bb'? y
rm: remove regular file `aa/bb/Two.class'? y
rm: remove regular file `aa/bb/One.class'? y
rm: remove directory `aa/bb'? y
rm: remove directory `aa'? y
[root@localhost zengbiao]# ls
hehe.jar One.java Two.java
[root@localhost zengbiao]# java -cp hehe.jar aa/bb/One
-cp 此处通过绝对路径运行jar包中的类
This is One.
[root@localhost zengbiao]# java -cp hehe.jar aa/bb/Two
This is Two.
[root@localhost zengbiao]#
小结
javac -verbose 文件名.java 编译并显示详细信息
java -verbose 文件名 运行并显示详细信息
0 0