一、背景描述
公司最近开发一个功能,将上传的docx,doc文件转换成pdf并添加水印并用流的形式下载下来,我使用aspose-words的jar包,在本地windos环境测试功能没有问题,但是放到linux中找不到jar包,调用下载接口时,word转换pdf接口异常错误。
二、报错分析
经过排查发现,手动添加的lib下aspose-words这个jar包并没有打到maven中央仓库上去,所以在部署jenkins的时候执行mvn打包功能,并没有将业务模块中lib下手动添加的jar包与maven仓库中的jar打在一起
三、解决问题的方案
最终排查发现在使用Maven的时候,如果我们要依赖一个本地的jar包的时候,通常都会使用<scope>system</scope>
和<systemPath></systemPath>
来处理。
例如:
<dependency> <groupId>com.aspose</groupId> <artifactId>aspose-words</artifactId> <version>15.8.0</version> <scope>system</scope> <systemPath>${project.basedir}/libs/aspose-words-18.6-jdk16-crack.jar</systemPath> </dependency>
如果你仅仅是这么做了,在你使用SpringBoot打包插件生成jar包的时候,你会发现这个jar包不会被打进去,进而出现错误。
这个就需要在maven插接中配置一个includeSystemScope属性:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--设置为true,以便把本地的system的jar也包括进来--> <includeSystemScope>true</includeSystemScope> </configuration> </plugin>
在Maven设置完includeSystemScope后,重新打包编译后,接口正常调用没有报错信息了。
四、总结
通过这次开发需求踩坑后对Maven的理解又深刻了一点,长路慢慢各种各样的需求只有在遇到了才会留下深刻印象。具体的了解有兴趣的小伙伴可以自行了解Maven相关的资料,来了解它每个标签值是干嘛用的。