java项目依赖的配置过程_一个靠谱的java项目自定义打包及部署方案

最近在弄一个spring boot项目,不是WEB应用,纯粹是后台应用,系统要临近部署,但是通过打jar的方式部署后有诸多不便,一个单独的jar想要修改配置文件什么的也很不方便,所以想弄一个方便靠谱的jar生成部署方案。

基本需求:

a.将项目依赖的所有第三方jar单独打包,便于区分,结构清晰。

b.部署后可以随时修改项目的配置文件,方便的进行重启、更新配置。

c.部署后的项目要生成外部日志文件,便于监控。

工具依赖:

1. intelliJ idea 2016

2. linux 系统要安装zip

步骤

1. File - Project Structure

b051bd490135c022e32adf90c39c164a.png

2. 在弹出的窗口中左侧选中"Artifacts",点击"+"选择jar,然后选择"from modules with dependencies"。

221abfbc9048cc2366592a754cfdc45c.png

3. 在配置窗口中配置"Main Class"。

4. 选择“Main Class”后,选择“copy to the output and link via manifest”,配置“Directory for META-INF/MAINFEST.MF”,此项配置的缺省值是:D:\workshop\DbUtil\src\main\java,需要改成:D:\workshop\DbUtil\src\main\resources(需要新建文件夹),如果不这样修改,打成的jar包里没有包含META-INF/MAINFEST.MF文件,这个应该是个IDEA的BUG(参考:http://stackoverflow.com/questions/15724091/how-to-run-a-jar-file-created-using-intellij-12),配置完成后如下图所示,点击OK进入下一步。(如果选择“extract to the target jar”,即把第三方jar文件,打入最终的可运行jar包时,可以不修改“Directory for META-INF/MAINFEST.MF”的配置,用缺省值即可)

80667ec9ae1b8f51ac64bd97df53acb9.png

5. 右键“”,选择“Create Directory”,输入目录名:libs

b908c495b6608d6e470acec3595c4c68.png

6. 用鼠标按住第三方jar,拖入下的libs目录下(注,可以shift+a全选,然后按住ctrl键用鼠标拖到libs目录下)

a9d6cff3928a0c3190415a382aae0f60.png

7. 用鼠标选中我们将要打出的jar包文件,点击下方“Class Path:”后面的按钮,在“Edit Classpath”窗口中,将每个第三方jar文件前加上相对路径:libs/,形成如:libs/xxx.jar的形式(注意是 / ,而不是 \),这个目录“libs”,就是前面输入的那个“libs”,这里如果第三方jar很多的话,可以在“Edit Classpath”窗口中,用鼠标选中所有第三方jar,然后Ctrl+X,把内容cut & copy到notePad++中,ctrl+h用正则行首(^)替换全部修改好,再paste到“Edit Classpath”窗口中完成后如下所示:

13287fb5c92349164370c31784781750.png

9dc219870a2379954da8d141eecf48f3.png

8. 完成后,点击OK,Apply等按钮,回到IDEA的主菜单,选择“Build - Build Artifacts”下的“Build”或者“Rebuild”即可生成最终的可运行的jar,并把第三方jar放到和此jar并行的lib目录下,用winrar打开目标jar,可以看到META-INF/MAINFEST.MF文件被正确包含,内容也正确。

1581659fbd981cb71c439d875826cde8.png

cf5f03cce6b1f3280b94d8aae67c36cb.png

打包结果: 根据以上步骤最终在项目目录下生成如下文件,可以看到项目中引用的jar包都被单独放到libs目录下了

0b2e7dcefbb5eee148e907c891b5e87e.png

自定义随时修改配置文件

我们解压项目jar可以看到,配置文件都被打到jar包里去了,如果我想实现可随时修改配置文件重再运行该怎么办呢?

6edc10a0609709c2280b077d9bb9ebe6.png

因为jar要放到linux服务器上运行,采用了shell脚本方式解决。

建个configs目录,

85ed6f7f1158213a1f4b55c6944ea073.png

把\target\classes下编译好的源码和配置文件等都放进去【注意META-INF里的文件要换,里面没有class-path】

a12dad8de90dbb1f87fcd6a072fe1718.png

写个service.sh脚本,可以看到每次改好配置文件后,执行脚本,都会重新再打包一次,最后再运行jar包。

这样算是解决需求了,后期再试试有没有更好的办法。

#!/bin/bash

set -e

export SPARK_MASTER_IP=127.0.0.1

export SPARK_LOCAL_IP=127.0.0.1

JARNAME="repost.jar"

MYPATH="/iflytek/software/repostRelation/"

#启动方法

start(){

cd $MYPATH

cd ./configs

zip -rq ../$JARNAME ./*

cd ..

now=`date "+%Y%m%d%H%M%S"`

exec java -Xms2048m -Xmx4092m -jar $MYPATH$JARNAME 5 >/dev/null &

#java -Xms128m -Xmx2048m -jar cmpp.jar 5 > log.log &

#tail -f result.log

ps -aux | grep $JARNAME

echo "RepostRelation Start SUCCESS!"

}

#停止方法

stopService(){

ps -ef|grep $JARNAME | awk '{print $2}' |while read pid

do

kill -9 $pid >/dev/null 2>&1 &

done

cd $MYPATH

rm *bidcheck.log >/dev/null 2>&1 &

ps -aux | grep $JARNAME

echo "RepostRelation Stoped!"

}

case "$1" in

start)

start

;;

stop)

stopService

;;

restart)

stopService

start

;;

*)

printf 'Usage: %s {start|stop|restart}\n' "$prog"

exit 1

;;

esac

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值