linux打包java jar_Linux下编译打包Java成Jar并成功执行

1.Linux下编译Java源文件:

1.1 编译命令:

javac [-d] [-o] [-verbose] [-classpath][-sourcepath]

-d: 指定生成的.class文件存放目录,一般省略则默认放在java源文件同一目录下;

-o: 这个选项告诉javac优化内联的static,final以及privite成员函数所产生的码;

-verbose:此选项告知java显示出有关被编译的源文件和任何被调用类库的信息;

如-verbose:class能看到各种加载的信息,-verbose:gc 是garbagecollection 的信息。

-classpath:设定编译时要用到的类路径,可以是目录,jar文件,zip文件(里面都是class文件);

值得注意的是,此classpath可以简写为cp,当用到多个类时各类路径之间用  :  相隔。

此项也可以省略,省略则默认使用环境变量$CLASSPATH路径。

classpath中的内容是会覆盖掉环境变量CLASSPATH里面的设定。

所以一般classpath的设定都是:当前目录加环境变量CLASSPATH设置目录,如

javac  -cp .:$CLASSPATH    abc.java

-sourcepath:设定要编译的java文件路径,可以是目录,jar文件,zip文件(里面都是java文件);

注意,若编译的是jar包中的主类文件abc.java时,一般编译整个包javac edu.test.jar或者包文件夹javac ./edu/test。

一般当有多个java文件需要编译时,可以逐一列出,也可以将文件名列在一个文件中,名称间用空格或者回车行来进行分隔,然后在命令行中使用该列表名,名字前冠以@字符,如:

javac @usr/test/sourcefile.list     编译目录usr/test 下的sourcefile.list中的java文件

1.2 说明:

1)一般对于只有一个出口主函数main,其他java文件是以内联类的形式被主函数调用的多个java文件组成的工程来说,编译时只需要对出口主函数main所在java文件编译即可,工程中的其他java文件会自动关联编译;

2)对于程序中调用到了第三方类或者package的情况,则一般先需要在程序文件中加入import第三方类或者jar包;

如 import edu.test.abc 引用jar包edu.test下的abc.java,为稳妥,一般都引用整个包内文件import edu.test.*。编译时需要将jar包路径或者文件夹根目录,如edu的路径加入到classpath中。一般常把jar包或者根文件夹拷贝到当前目录下,指定classpath为.,编译器自动会从当前目录开始寻找。

1.3 实例:

javac -cp .:/home/Test/lib/commons-collections-3.2.2.jar -d . *.java

2.将Java源文件打成Jar包:

2.1 打包命令:

jar {ctxu}[vfm0M][jar-文件] [manifest-文件] [-C 目录] 文件名

其中 {ctxu} 是 jar命令的子命令,每次 jar 命令只能包含 ctxu 中的一个,它们分别表示:

-c:创建新的 JAR 文件包;

-t:列出 JAR 文件包的内容列表;

-x:展开 JAR文件包的指定文件或者所有文件;

-u:更新已存在的 JAR 文件包(添加文件到 JAR 文件包中);

特别注意,在参数的下达中, c/x/t/u仅能存在一个,不可同时存在!因为不可能同时压缩与解压缩。

-z:是否同时具有 gzip的属性?亦即是否需要用 gzip 压缩;

-j:是否同时具有 bzip2的属性?亦即是否需要用 bzip2 压缩;

-v:压缩的过程中显示文件!这个常用,但不建议用在背景执行过程;

-f:指定 JAR文件名,通常这个参数是必须的;

请留意,在 f之后要立即接档名喔!不要再加参数!

比如:

『 tar -zcvfP tfile sfile』就是错误的写法,

『 tar -zcvPf tfile sfile』才是正确的写法。

-p:使用原文件的原来属性(属性不会依据使用者而变;

-P :可以使用绝对路径来压缩;

-N:比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件;

-excludeFILE:在压缩的过程中,不要将 FILE 打包;

-m:指定需要包含的 MANIFEST清单文件;

-0:只存储,不压缩,这样产生的 JAR文件包会比不用该参数产生的体积大,但速度更快;

-M:不产生所有项的清单(MANIFEST〕文件,此参数会忽略-m 参数;

[jar-文件]:即需要生成、查看、更新或者解开的 JAR 文件包,它是 -f 参数的附属参数;

[manifest-文件]:即MANIFEST 清单文件,它是 -m 参数的附属参数

[-C 目录]表示转到指定目录下去执行这个 jar 命令的操作,它相当于先使用 cd 命令转该目录下再执行不带 -C 参数的命令,它只能在创建和更新 JAR文件包的时候可用。

文件名:指定一个文件/目录列表,这些文件/目录就是要添加到 JAR 文件包中的文件/目录。如果指定了目录,那么jar命令打包的时候会自动把该目录中的所有文件和子目录打入包中。

2.2 实例:

jar -cvf IDMatch_V1.jar *.class

3.运行jar包:

3.1 运行命令:

1、java -jar xxxxx.jar

当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出。

2、java -jar xxxxx.jar &

当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。

3、nohup Java -jar xxxxxx.jar &

不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。

3.2 实例:java -cp .:/home/Test/lib/commons-collections-3.2.2.jar:./Test.jar com.test.datahandle.Test


版权声明:本文为weixin_39751195原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。