使用maven单独部署定时任务等工程

来源:互联网 发布:全民枪战qcwo5炎黄数据 编辑:程序博客网 时间:2024/06/09 16:58

        由于系统有一些数据需要定时去跑,所以需要单独部署。以前进行网站开发时,没有使用maven进行代码管理,导致于最后部署

定时任务有一些弊端:

1.需要将很多依赖工程同步部署,即使是jar包形式,也需要先检查依赖的工程是否有更新,重新编译取包;

2.使用ant进行代码管理,编译时各种依赖关系比较复杂(多个build.xml文件)

3.shell脚本执行某个java类时需要指明classpath,这个还是比较复杂的


由于以上原因,再结合目前系统使用了maven管理代码,故使用maven单独部署定时任务。由于初步使用,可能不尽完美,等后

续继续完善。

1.使用pom文件进行依赖管理。为了便于管理定时任务,在父pom下新建了一个模块,该模块下为所有的定时任务。所有的模块

都在父pom下,所有的模块的子模块打成的jar包也都定义在该父pom下。这样的好处就是:定时任务代码调用任何系统中的api时直

接在定时工程的pom中引入依赖即可。


2.在服务器上直接部署父pom和定时工程,如果有本地maven库,并且不全,可以先install。然后需要执行mvn compile进行编

译。

这里需要安装maven,maven是免安装的,使用wget 命令得到tar.gz包,然后解压移动,设置环境变量即可。参

照http://www.blogjava.net/caojianhua/archive/2011/04/02/347559.html


3.这里是最关键的一步了,使用maven进行单独部署的魅力就在于这里。对,就是maven的exec-maven-plugin插件。maven

设计这个插件出来个人认为目的就是让开发人员脱离烦躁的classpath梳理,maven帮你获得classpath,简化启动程序的步骤,

唉,maven这是在抢程序猿的生意啊,程序猿以后都是傻瓜了...


开个玩笑,maven这个还是十分人性化的,可以使我们从十分繁琐并重复的劳动中解脱出来,去进行更伟大的编码事业!话不

多说,exec插件主要有exec:java和exec:exec两种使用方法。后者要比前者功能强大很多,主要区别在于exec:exec总是启动一个

新的线程,并且在只剩下守护线程时退出,即关闭应用程序;而对于exec:java,当所有非守护线程结束时,守护线程会被join或者

interrupt,应用程序不会关闭(本程序使用了exec:java,在代码的末尾使用了System.exit(0)来进行手动退出)。区别参

考:http://blog.csdn.net/bluishglc/article/details/7622286

exec:java的主要命令:

不存在参数的情况下:mvn exec:java -Dexec.mainClass="***.Main"
存在参数:mvn exec:java -Dexec.mainClass="***.Main" -Dexec.args="arg0 arg1 arg2"
指定运行时库:mvn exec:java -Dexec.mainClass="***.Main" -Dexec.classpathScope=runtime

exec:exec的主要命令参照上面链接。

4.提示一下遇到的问题

(1).执行exec命令时报错找不到执行类。

原因:-Dexec.mainClass的参数值是指定类名的,上面的命令中的Main是类名不是指在类名后加该字符串。这个让我吃了些小亏。

(2).执行maven的命令记着要在有pom的路径下执行

(3).Windows下书写的shell脚本是比较坑爹的。在dos和Windows下一次换行则实际上输入的是回车和换行;而Linux下换行实际上输入的就是换行。

解决办法:或在Windows下按照Unix格式保存shell脚本;或在Linux上使用vi的:set ff=unix方法改变脚本格式;或直接在Linux上编写脚本。

参照:http://blog.csdn.net/guoshaogang/article/details/7275718

由于是简单使用,不深入,高手勿喷了则个~~~

共勉!

0 0
原创粉丝点击