maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

时间:2024-03-27 14:28:47

事件起因:

公司有个业务需求,两个系统搞对接,双方采用中间库的方式进行数据交互,设立了中间表,对方采用的oracle,我方采用的sqlserver,我负责写个程序定时从oracle的中间表中读取数据写入到公司的sqlserver中,我采用spring+mybatis+quartz+atomikos框架完成了一个配置多数据源定时从oracle读取数据到sqlserver的项目,该项目没有页面,最初的版本是tomcat启动本程序,但是由于领导要求程序不在tomcat下运行,要求把项目改成exe类型不需要任何环境安装直接点击可运行!

最先听到这个需求的时候有点蒙,之前没怎么用java写桌面程序,后来看了网上的资料,知道要想把项目打成可执行jar包,再来通过exe4j转成exe,知道怎么做之后,我就开始对我的maven项目进行打jar包,然后通过doc命令执行jar包进行测试,结果就遇到了各种问题:

问题一:

maven项目打jar包后,没有指定mian函数入口,spring的项目脱离tomcat启动可以通过spring的上下文来获取实例调用方法,

ApplicationContext context = new ClassPathXmlApplicationContext("spring-mybatis.xml");  
Scheduler scheduler = (Scheduler) context.getBean("testSchedulerFactoryBean");

我们要写一个含有main方法的类来启动spring容器,写好后在maven打包的插件中指定main函数入口,在mainClass中填入类全名

maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

     问题二:

maven项目打jar包后,把mapper层的xml给漏掉了,导致启动的时候映射mapper实例失败

maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)


maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

这里我们打包的时候要把xml文件打包完全,要在pom.xml中加入


maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

问题三:maven打jar包后,外部引用的jar包没打进去,由于我在外部引入的oracle和sqlserver的数据库驱动jar包,导致maven打包的时候没有包这两个jar包包含进去

maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

解决办法:由于时间仓促,我采用了比较粗暴的方法,直接把这两个jar包拷贝到maven打包后的lib包下面去了,

maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

但是启动的时候还是报错,说找不到class类文件,这里我忽略了一个问题maven打包后会有一个MANIFEST.MF的文件,里面有各种配置信息,jar启动的时候就是读里面的配置信息来启动的,maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

classPath里面要把外部的jar包路劲信息加进去,不然jar启动的时候就读不到驱动,就会失败

maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

加入之后启动jar包

maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)


maven打jar包,用doc命令执行jar遇到的各种问题(记录备忘)

千辛万苦终于启动了,至此maven项目通过jar包启动任务来动态读写数据库操作就成功了,接下来就是用exe4j来把jar包转exe了,后面的文章会继续介绍,现在记录备忘,希望会对大家有所帮助!