jar包运行方式及日志
jar包运⾏⽅式及⽇志
⼀般情况下运⾏jar包,当前是可运⾏的jar包,直接命令
java -jar common.jar
按下ctrl+C ,关闭当前ssh或者直接关闭窗⼝,当前程序都会退出。
我们在命令的结尾添加 “&” ,&表⽰该程序可以在后台执⾏
java -jar common.jar &
但是在当窗⼝关闭时,程序也会中⽌运⾏
nohup java -jar common.jar &
命令最前⾯个nohub关键字,这样程序就会不挂断运⾏命令, 当ssh终端关闭时,程序仍然在运⾏,当前程序的⽇志会被写⼊到当前⽬录的nohup.out⽂件中
我们可以改下输⼊的⽇志⽂件
nohup java -jar common.jar > log.out &
当前程序的⽇志会被写⼊到当前⽬录的log.out⽂件中
如果不想写⽇志,可以将⽇志重定向到 /dev/null 中,/dev/null代表linux的空设备⽂件,所有往这个⽂件⾥⾯写⼊的内容都会丢失
nohup java -jar common.jar > /dev/null &
标准输出就会不再存在,没有任何地⽅能够找到输出的内容
nohup java -jar common-api.jar >/dev/null 2>log.error &
只输出错误信息到⽇志⽂件,标准输出不写⼊⽇志⽂件,直接丢弃
nohup java -jar common-api.jar >/dev/null 2>&1 &
标准输出(stdout)重定向到/dev/null中(丢弃标准输出),然后标准错误输出(stderror)由于重⽤了标准输出的描述符,所以标准错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了
nohup java -jar common-api.jar >log.out 2>&1 &
标准输出重定向到log.out中,然后错误输出由于重⽤了标准输出的描述符,所以错误输出也被定向到了log.out中
但是不管那种情况,如果⽇志输出,⽇志⽂件都会增加很快,造成单个⽂件很⼤。所以需要拆分⽂件
1:定时作业,每天将⽇志⽂件复制⼀份,然后将当前的⽇志⽂件清空。
2:借助 cronolog来分隔⽇志
nohup java -jar common-api.jar | /usr/local/cronolog/sbin/cronolog logs/console-%Y-%m-%d.out &
这样每天会产⽣⼀个console开头的⽇志⽂件。
Maven项目打包成jar包运行(将第三方引用包与项目代码打包成一个jar包)
Maven项⽬打包成jar包运⾏(将第三⽅引⽤包与项⽬代码打包成
⼀个jar包)
⼀、新建Maven项⽬,Packaging为jar
⼆、新建主类
主类代码如下:
package com.example.demo;
import javax.swing.JFrame;
public class GuiMain extends JFrame {
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
GuiMain gm = new GuiMain();
gm.setTitle("JFrame窗⼝");
gm.setSize(640, 480);
gm.setResizable(false);
gm.setLocationRelativeTo(null);
gm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gm.setVisible(true);
}
}
三、pom.xml详细配置
org.apache.maven.plugins
maven-shade-plugin
3.2.1
package
shade
*.*
META-INF/*.SF
com.example.demo.GuiMain
四、清理、编译、打包
项⽬结构最终如下:
打开命令提⽰符,cd到该项⽬的根⽬录下,即与pom.xml同⼀⽬录,然后运⾏mvn clean compile package,效果如图所⽰:
进⼊项⽬中的target⽬录,⽂件列表如图所⽰:
五、运⾏
将DemoGui.jar拷贝⾄指定位置,如E:\release\java下,如图所⽰ :
通过命令提⽰符运⾏java -jar DemoGui.jar,即可将程序运⾏。
或者
使用命令把SpringBoot项目打包成可运行的jar包(简洁,操作性强)
使⽤命令把SpringBoot项⽬打包成可运⾏的jar包(简洁,操作性强)
前⼏天接到⼀个需求,要把原系统中⼀个数据处理⼩功能搬出原系统,拉出来单独做⼀个SpringBoot项⽬,然后打成jar包扔到Windows服务器上运⾏,这样数据处理的时候如果遇到堵塞就不⾄于整个系统都当掉了,今天正好五⼀放假第⼆天,吃过楼下的紫燕百味鸡,正好没啥事写下这篇博客,希望对路过的⼈有所帮助
话不多说,直接上⼲货,⾮常简单,只需要⼀个命令即可
只需要打开IDEA下⾯的Terminal,执⾏这两个命令 :
1 、mvn package clean -Dmaven.test.skip=true
解释:把之前打过的包通通⼲掉。
2、mvn package -Dmaven.test.skip=true
解释:重新打包。执⾏完上⾯两个命令,效果如下图所⽰:
然后去你的target⽬录下找到这个jar包,如下图所⽰:
最后⼀步,把jar包扔到服务器上,创建⼀个bat批处理⽂件,这个bat⽂件主要是通过双击启动刚才SpringBoot打成的jar包
bat⽂件⾥⾯需要输⼊⼀些固定的指令,截图如下:
双击bat⽂件,即可启动项⽬了
运行jar包shell脚本
运⾏jar包shell脚本
#!/bin/sh
#该⽂件必须放在jar包的⽬录下,因为是以相对路径来运⾏的。不放jar包⽬录的话,可以直接在jar_name参数写绝对路径
#start 设置三个参数
#环境
profile=test
#jar的路径和名称
jar_name=zhong-auth.jar
#远程断点端⼝
remote_address=
#end 设置三个参数
echo "运⾏$jar_name"
#查询进程,并杀掉当前jar/java进程
pid=`ps -ef|grep $jar_name|grep -v grep|awk '{print $2}'`
echo "进程为$pid"
kill -9 $pid
echo "$pid进程终⽌成功"
sleep 2
#判断jar包⽂件是否存在,如果存在启动jar包,并时时查看启动⽇志
if test -e $jar_name
then
echo "$jar_name存在,开始启动此程序..."
# 判断是否有远程断点端⼝
if test -z "$remote_address"
then
# 启动jar包
nohup java -Xms64m -Xmx128m -jar $jar_name --spring.profiles.active=$profile >/dev/null 2>&1 &
echo "远程断点端⼝为空"
else
# 启动jar包
nohup java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$remote_address -Xms64m -Xmx128m -jar $jar_name --spring.profiles.active=$profile >/dev/null 2
echo "远程断点端⼝为$remote_address"
fi
echo "$jar_name 启动成功..."
如何运行spring项目,并打成jar包进行发布
如何运⾏spring项⽬,并打成jar包进⾏发布
⼀、创建spring项⽬
1、创建项⽬
2、创建moudule,选择java类型即可。
3、创建lib⽂件,引⼊spring的4个核⼼包spring-beans、spring-context、spring-core、spring-expression,以及核⼼包的⽇志依赖包commons.logging包
4、创建spring的配置⽂件,⽤来定义加载spring的容器。其中 xmlns:context 指的是对应依赖的包的命名空间,:后⾯不填默认指的是beans。
xmlns:xsi 指向的是xmlshema的应⽤程序。
xmlns:shemaLocation 的作⽤,使下⾯将要写的那些xml 符合 这⾥⾯依赖所对应的xmlShemaDefinition(xml命名空间的约束)
5、创建SuperManVO类
6、在spring容器配置⽂件中增加bean的配置,通过属性注⼊的⽅式,创建bean对象。
7、创建应⽤启动类,使⽤spring上下⽂的类路径加载器 加载 spring容器。从容器中获取bean对象
8、程序启动
⼆、spring项⽬打包、启动
1、打开项⽬结构设置 project structure或者
2、选择Artifacts这⼀项,进⾏设置。
3、⽣成配置,从项⽬模块中创建jar包。点击apply。使配置⽣效。
4、此时项⽬中会⽣成 META-INF ⽂件夹,⾥⾯包含 MANIFEST.MF。
该⽂件夹的作⽤。相当于⼀个信息包,⽬录中的⽂件和⽬录获得Java 2平台的认可与解释,⽤来配置应⽤程序、扩展程序、类加载器和服务 manifest.mf⽂件,在⽤jar打包时⾃动⽣成,该⽂件内部如右边图所⽰
5、⽣成artifact,应⽤产物
6、可以看到已经⽣成了jar包
7、使⽤java -jar 启动 jar应⽤,success
JAVA-jar包运行及日志输出
JAVA-jar包运⾏及⽇志输出
⼀般情况下运⾏jar包,当前是可运⾏的jar包,直接命令java -jar common.jar 按下ctrl+C ,关闭当前ssh或者直接关闭窗⼝,当前程序都会退出。
我们在命令的结尾添加 “&” ,&表⽰该程序可以在后台执⾏java -jar common.jar & 但是在当窗⼝关闭时,程序也会中⽌运⾏nohup java -jar common.jar &命令最前⾯个nohub关键字,这样程序就会不挂断运⾏命令, 当ssh终端关闭时,程序仍然在运⾏,当前程序的⽇志会被写⼊到当前⽬录的nohup.out⽂件中
我们可以改下输⼊的⽇志⽂件nohup java -jar common.jar > log.out &当前程序的⽇志会被写⼊到当前⽬录的log.out⽂件中
如果不想写⽇志,可以将⽇志重定向到 /dev/null 中,/dev/null代表linux的空设备⽂件,所有往这个⽂件⾥⾯写⼊的内容都会丢失nohup java -jar common.jar > /dev/null &标准输出就会不再存在,没有任何地⽅能够找到输出的内容
nohup java -jar common-api.jar >/dev/null 2>log.error & 只输出错误信息到⽇志⽂件,标准输出不写⼊⽇志⽂件,直接丢弃
nohup java -jar common-api.jar >/dev/null 2>&1 & 标准输出(stdout)重定向到/dev/null中(丢弃标准输出),然后标准错误输出(stderror)由于重⽤了标准输出的描述符,所以标准错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了
nohup java -jar common-api.jar >log.out 2>&1 & 标准输出重定向到log.out中,然后错误输出由于重⽤了标准输出的描述符,所以错误输出也被定向到了log.out中
Maven中解决jar包冲突的三种方式
Maven中解决jar包冲突的三种⽅式
⾸先我们在idea中创建⼀个maven⼯程,我们只关注
pom.xml以及
External Libraries中导⼊的jar包
导⼊
spring-beans.jar
org.springframework
spring-beans
4.1.2.RELEASE
再看左侧
再看下jar包依赖
可以发现
spring-beans.jar依赖于
spring-core.jar,
spring-core.jar依赖于
commons-logging,当然这也是
spring唯⼀依赖的外部jar包
⼀、路径最短原则
那如果我们⼿动添加了⼀个
spriing-core.jar,但是版本号是
4.3.18,那么最终引⼊的依赖是哪个呢?
当然是
4.3.18版本的,这是因为写在
pom.xml是直接依赖,⽽由
spring-bean.jar引⼊的
spring-core.jar是间接依赖,直接依赖优先于间接依赖。
⼆、声明优先原则
让我们回到开始 的情况,
我们加⼊
spring-context.jar,
org.springframework spring-beans
4.1.2.RELEASE org.springframework spring-
context 4.3.18.RELEASE
我们看下依赖树:
可以发现
spring-beans.jar和
spring-context.jar都依赖于
spring-core.jar,
那猜⼀下,按上⾯这种⽅式,是导⼊了两个版本的spring-core呢?还是导⼊了⼀个版本的呢,导⼊⼀个版本的那么它的版本号是多少呢?
现在再来看导⼊的依赖
发现导⼊的是4.1.2
现在换下两个依赖的位置
org.springframework spring-context
4.3.18.RELEASE org.springframework spring-
beans 4.1.2.RELEASE
如何修改可运行Jar包,如何反编译Jar包
如何修改可运⾏Jar包,如何反编译Jar包
将可运⾏Jar包,反编译成项⽬,修改代码,再次编译,打包。
需要⼯具:jd-gui、myeclipse
具体步骤:1、使⽤jd-gui打开原始的Jar包,选择File-->Save All Sources,会⽣成⼀个zip压缩包
2、解压这个压缩包,⽣成⼀个⽂件夹,可以看到⽂件夹⾥所有的class⽂件变成了java源码⽂件。(如果最开始直接解压原始的Jar包,那么解压出来的就是class⽂件,⽽不是java源⽂件)
3、打开myeclipse,新建⼀个普通的Project项⽬,将解压后的内容拷贝到项⽬⾥。
4、此时编译会报错,因为缺少依赖的Jar包,需要找到相应的包并且导⼊。那么这些包到底是哪些呢?
使⽤jd-gui打开最原始的Jar包,在META-IN⽬录下的maven⽬录下,有所需要的依赖包。其中pom.properties中记录着Jar包的版本信息,可以直接从maven仓库下载这些包
5、最后,项⽬重新编译,并且打成Jar包。如果⽣成的源码可以运⾏,就直接编译,直接打包。
6、如果⽣成的项⽬不能运⾏,但是你只需要更改⼀两个类:
(1)编译。如果导⼊了所依赖的包,那么项⽬编译应该是没问题的,这⼀步仔细检查。然后使⽤myeclipse或者java命令编译,⽣成⼀个class⽂件。
(2)打包。简单的⽅法:使⽤rar,zip,好压等解压缩⼯具打开原始的Jar包,直接把修改的class⽂件拖进去,覆盖原来的class⽂件。复杂的⽅法:将原始Jar包,直接解压⽣成⼀个⽂件夹,解压后的是class⽂件。⽤修改后的class⽂件进⾏替换,再将这个⽂件夹压缩⽣成⼀个zip⽂件,最后将zip⽂件的后缀名改成jar,即可运⾏。 注意使⽤winrar⼯具打包时,要选择压缩⽂件格式为zip
原创⽂章,欢迎转载,转载请注明出处!
SpringBoot引入第三方jar包或本地jar包的处理方式
SpringBoot引⼊第三⽅jar包或本地jar包的处理⽅式
在开发过程中有时会⽤到maven仓库⾥没有的jar包或者本地的jar包,这时没办法通过pom直接引⼊,那么该怎么解决呢⼀般有两种⽅法
第⼀种是将本地jar包安装在本地maven库
第⼆种是将本地jar包放⼊项⽬⽬录中
这篇⽂章主要讲第⼆种⽅式,这⼜分两种情况,⼀种是打包jar包,第⼆种是打包war包
jar包
先看看jar包的结构
⽤压缩⼯具打开⼀个jar包
打包后jar包的路径在BOOT-INF\lib⽬录下
在项⽬⽬录中创建个⽂件夹⽤来存放jar包
pom⽂件中加⼊如下内容
com.ckfinder
json-lib
2.3
system
${project.basedir}/src/main/resources/jar/json-lib-2.3-jdk15.jar
groupId,artifactId,version可随便写
这时候在项⽬中运⾏是没问题了,但是使⽤命令mvn clean package打包之后BOOT-INF\lib⾥⾯并没有json-lib-2.3-jdk15.jar包,还需要pom⽂件中做如下配置:
org.springframework.boot
spring-boot-maven-plugin
true
之后再使⽤mvn clean package打包就OK了
war包
war包的⽬录如下:
jar包在WEB-INF/lib⽬录下
使⽤mvn clean package命令打包时需要在pom⽂件加⼊以下内容
org.apache.maven.plugins
maven-war-plugin
2.4
src/main/resources/jar/
WEB-INF/lib/
**/*.jar
win10系统中.jar被压缩包更改了图标后如何恢复和双击运行
win10系统中.jar被压缩包更改了图标后如何恢复和双击运⾏
⼏天前下载安装⼀个正则表达式检查器regext,结果偷偷给我安装了很多莫名其妙的软件,其中⼀个是压缩包并修改了我电脑⾥⾯的.jar图标为压缩包,卸载这个偷偷安装的压缩包后,导致我的.jar⽂件双击不能运⾏,且图标变更空⽩,百度上找了好久的资料都没有彻底解决,综合好⼏个⽹站资料终于把问题搞定了。
记录⼀下解决的步骤,为这个问题耗时3⼩时哭泣
步骤⼀:修改注册表⽂件打开路径:1)win+R键,打开“运⾏”
2)输⼊“regedit”,打开注册表
3)找到:计算机 \HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command
4)右键修改-默认
修改为以下"C:\Program Files\Java\jre1.8.0_301\bin\javaw.exe" -jar "%1" %*
(C:\Program Files\Java\jre1.8.0_301\bin\javaw.exe为⾃⼰jre的路径)
步骤⼆:设置.jar⽂件默认打开⽅式1、在⽂件上右键--属性。
2、常规选择“更改“,然后找到⾃⼰需要默认打开的应⽤。
综上两个步骤后:win10系统中.jar图标恢复成java图案和双击运⾏成功。还是运⾏不了时,请重启⼀下机器后再试试。
最后补充下相关知识:
⼀个程序打jar包后,必须要在解压软件中打开jar包双击运⾏仅对于图形化界⾯的程序起作⽤,对控制台的程序不起作⽤。
java.exe适合⽤于启动window console控制台程序
javaw.exe适合⽤于启动GUI程序
javaws.exe适合⽤于web程序。
——————————————————————
欢迎转载,希望能帮助到⼊坑的⼩⼼⼼们
转载请备注出处,谢谢
Linux下解压修改jar包并运行
Linux下解压修改jar包并运⾏
Linux下运⾏jar包,先要修改jar包的配置⽂件。修改jar包配置⽂件有以下⼏种⽅式:
⽅式⼀ 通过vim命令直接修改保存jar。超⽅便。
1.通过vim命令直接编辑jar
vim xxx.jar 该命令⾸先会列出全部⽂件,可以通过输⼊/abc来搜索,定位到对应的abc⽂件后回车进⼊配置⽂件内进⾏编辑,:wq保存。
⽅式⼆ 通过jar命令替换jar包中的⽂件(也可新增)
1. 列出jar包中的⽂件清单
jar tf dip-gw.jar
2.提取出内部jar包的指定⽂件
jar xf dip-gw.jar BOOT-INF/classes/application.yml
3.然后可以修改⽂件
vim BOOT-INF/classes/application.yml
4.更新配置⽂件到内部jar包.(存在覆盖,不存在就新增)
jar uf dip-gw.jar BOOT-INF/classes/application.yml
4.1更新内部jar包到jar⽂件
jar uf dip-gw.jar 内部jar包.jar
5.可以查看验证是否已经更改
vim dip-gw.jar
⽅式三 解压jar包,修改后重新打包jar
1.解压
unzip dip-gw.jar 2.移除jar包,最好备份
rm dip-gw.jar3.修改配置⽂件后保存,重新打包
jar -cfM0 dip-gw.jar *或者jar -cvfm0 dip-gw.jar ./META-INF/MANIFEST.MF ./
jar命令参数:
-c 创建新的存档
-f 指定存档⽂件名
-M 不配置配置清单,这样还可以使⽤maven⽣成的配置清单也就是MANIFEST.MF
-0 不进⾏压缩,如果压缩会有问题
-m 指定清单⽂件
-t 列出归档⽬录
-x 从档案中提取指定的 (或所有) ⽂件
-u 更新现有的归档⽂件
-v 在标准输出中⽣成详细输出
运⾏jar包
