Java执行jar总结

在项目中有时会把代码打成jar包执行因为jar有如下优点:

  • jar里是存储过程执行效率高
  • jar包可移植性好
  • 注意:c3p0连接池在多线程下有bug,建议换成其他连接池如:dbcp

一 导出jar包

  • main方法
public static void main(){}
  1. 导出jar

  2. 打开jar包中META-INF文件夹下MANIFEST.MF文件

  3. 指定Main-class路径(Main-class: com.test.cmd.Main

    • class:后面一定要有空格
    • 主文件的路径一定要写全路径
    • 上面的Main中一定要有一个换行

二 手动打jar包

  1. 手动编译
javac -encoding utf-8 -Djava.ext.dirs=libs -d classes src\com\compile\demo\*.java src\com\compile\demo\bean\*.java
  1. 创建MANIFEST.MF文件
Manifest-Version: 1.0  // 版本号默认为1.0
Main-Class: com.compile.demo.Main//入口的主类,也就是main方法所在的类
Class-Path: commons-lang3-3.4.jar//引用外部类的路径
请务必在文件的最后一行,至少加一个回车换行
  1. 打包 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 &

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

讓丄帝愛伱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值