问题描述:
在工作开发中,完成程序接入打印机,实现操作金额后打印出小票的功能。
结果在编写代码结束后,在本地能够成功运行打印小票,但打成jar包后运行则显示Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError的错误。
打印小票的功能中,有三处引用第三方文件的地方,一是第三方jar包,二是多个初始化打印类文件,三是两个dll文件。
首先怀疑打包时,未将第三方jar包包含进入。添加pom.xml文件里的代码
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
<classifier>exec</classifier>
<!-- <executable>true</executable>-->
<mainClass>com.yn.admin.MyApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
结果改变了报错信息
看来jar包打包成功了,但仍有问题。
后面怀疑两个dll文件在业务模块中,而没有在启动类模块中,导致dll文件未被打进jar包。将文件放入启动类模块的resources目录下后多次实验无效果,依旧报错。
最后查看网上资料发现是需要加一层目录的原因,根据dll文件位数不同,分别放入win32-x86和win32-x86-64目录中,且Native.loadLibrary时,不需要加上.dll的文件后缀。
问题解决!
参考文献: