在项目中有时会把代码打成jar包执行因为jar有如下优点:
- jar里是存储过程执行效率高
- jar包可移植性好
- 注意:c3p0连接池在多线程下有bug,建议换成其他连接池如:dbcp
一 导出jar包
- main方法
public static void main(){}
-
导出jar
-
打开jar包中
META-INF
文件夹下MANIFEST.MF
文件 -
指定Main-class路径(
Main-class: com.test.cmd.Main
)- class:后面一定要有空格
- 主文件的路径一定要写全路径
- 上面的Main中一定要有一个换行
二 手动打jar包
- 手动编译
javac -encoding utf-8 -Djava.ext.dirs=libs -d classes src\com\compile\demo\*.java src\com\compile\demo\bean\*.java
- 创建MANIFEST.MF文件
Manifest-Version: 1.0 // 版本号默认为1.0
Main-Class: com.compile.demo.Main//入口的主类,也就是main方法所在的类
Class-Path: commons-lang3-3.4.jar//引用外部类的路径
请务必在文件的最后一行,至少加一个回车换行
- 打包
jar cvfm Myprogram.jar MANIFEST.MF *.class
在该文件夹下执行:jar -cvfm compile.jar MANIFEST.MF com commons-lang3-3.4.jar
在window中手动打jar包:jar cvfm requestUrlTest.jar .\test\manifest.mf .\test\*.class
E:\workspace\forkjoin\out\production\ForkJoin> jar -cvfm Test12.jar .\META-INF\MANIFEST.MF .\main\jar\Test12.class
//添加多个class并添加MATE-INF文件:
E:\workspace\forkjoin\out\production\ForkJoin>jar -cvfm Test1.jar .\META-INF\MANIFEST.MF .\main\jar\Test1.class .\main\jar\Test1$MyRunnable.class
jar命令是jdk自带的,可在%JAVA_HOME%\bin中找到
c 创建新档案
v 在标准输出中生成详细输出,有输出信息
f 指定档案文件名
m 包含指定清单文件中的清单信息,也就是指定我们的MANIFEST.MF 如果没有这个参数,会生成一个默认的MANIFEST.MF文件
compile.jar 指定生成jar包的名称
三 执行jar包
-
执行jar包:
java -jar hello.jar
-
执行时传参数:
java -jar hello.jar md5 s 123
- 需要要注意的是这个
.jar
文件后面的参数之间不要用逗号,而是空格
- 需要要注意的是这个
-
执行Jar包并设置内存参数:
java -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m -jar my_test.jar
-
执行的jar依赖第三方jar包:
- 第一种把第三方的jar包解压后与项目一起打包
- 第二种使用:
java -classpath 第三方.jar -jar helloworld.jar
-
执行jar里面的具体某个类:
java -cp xxx.jar xxx.com.xxxx
其中-cp
命令是将xxx.jar
加入到classpath
,这样java class loader
就会在这里面查找匹配的类 。 -
windows下,对于需要依赖的jar包使用-cp ,多个jar包之间使用分号;
javac -cp .;d:\javaTestIP\httpcore-4.4.1.jar;d:\javaTestIP\httpclient-4.4.1.jar;d:\javaTestIP\commons-logging-1.2.jar TestIPMain.java
java -cp .;d:\javaTestIP\httpcore-4.4.1.jar;d:\javaTestIP\httpclient-4.4.1.jar;d:\javaTestIP\commons-logging-1.2.jar TestIPMain
- linux下,对于需要依赖的jar包使用-cp ,多个jar包之间使用冒号:
javac -cp .:httpcore-4.4.1.jar:httpclient-4.4.1.jar:commons-logging-1.2.jar TestIPMain.java
java -cp .:httpcore-4.4.1.jar:httpclient-4.4.1.jar:commons-logging-1.2.jar TestIPMain
- 使用
-Djava.ext.dirs
指定jar包文件目录
javac -Djava.ext.dirs=D:\uepstudio_v4\eclipse\plugins CommonPlugin.java
四 后台不挂断执行jar包
nohup command &
nohup java -XX:MaxMetaspaceSize=1024m -XX:InitialBootClassLoaderMetaspaceSize=256m -Xms2g -Xmx4g -jar video-retrieval-0.0.1-SNAPSHOT.jar > start.log 2>&1 &
五 记录Java进程系统资源占用情况
进程实时监控命令pidstat
获取 jar 执行进程,获取执行过程中内存损耗情况:pidstat -r -p 12229 2 > memory.log &