在使用IDEA将所编写的java项目打包成jar文件时遇到了不少问题,所幸最后解决了,但是对于具体的原因却是疑惑的,因此进行记录。
首先,怎么做?
IDEA打包项目为jar包第一种方法(成功)
要使用maven的install,在输出目录target中找到文件 “xxxx-0.0.1-SNAPSHOT.jar”,这个就是项目导出的可用的jar包。
IDEA打包项目为jar包第二种方法(失败)
另一种失败的导出jar包的方式是在File ->Project Structure->build artifact->增加->选中启动类->build artifact,导出的jar包为 “项目名.jar” 。
其次,为什么?
以下是研究过程:
1. java项目在IDEA中是可运行无问题的,本人先是使用了第二种生成jar的方式,之后在jar包对应目录下输入cmd进入命令行窗口,使用 “java -jar 项目名.jar”,启动了jar程序,但是程序报错,显示如下错误(部分)
2 之后去查看程序,修改pom.xml的依赖版本,重新打包都没有解决问题。
3 使用第一个打包方式,使用maven的install进行打包,之后在jar包对应目录下输入cmd进入命令行窗口,使用 “java -jar 项目名-0.0.1-SNAPSHOT.jar”,成功启动jar程序。
4 试着研究两者打包方式结果不同的原因。
①对于同一个java项目,两者生成的jar包大小些许差异
②因此考虑到两者的具体文件并不一致,因此分别对两个jar进行直接解压。
③ 可以说两者的目录结构差别巨大,出现不同的结果不足为奇。但无论程序最后成功启动与否,两种打包方式生成的jar包都启动了spring,只不过其中使用build artifact生成的jar包在启动时会有“ 'sqlSessionFactory' or 'sqlSessionTemplate'”没有bean的注入,之后程序异常终止。至于那个maven install生成的jar包没有这些问题。
最后,是什么?
初步认为,无论是使用build artifact生成的jar,还是maven install生成的jar其实都是可以运行成功的。由于开发的java项目是使用maven构建的,所以使用maven生成对应的jar会更加简便,而使用build artifact生成jar可能还需要一些额外的配置才能正确运行。
至于这个问题的底层原因是框架的问题,还是依赖配置的问题,亦或是其他,只有等后面再去研究了······