发现自己很久没有更新自己的博客了,马上都是四月底了,自己却一篇文章都没写了,以前说的一周一篇,一个月下来也是四篇文章,但是现在来看一个月一篇都不行,看来自己还是需要好好督促自己。开始总结下最近一两个月来在工作中遇到的问题。
一:在/src/main/resources 下创建目录存储下载模板Excel文件
场景:需要在该工程编译的JAR包打成docker镜像,然后提供接口给前端,下载模板,然后发现在docker运行中发现总是去读取文件是不行的。然后通过测试,在使用mvn clean installl生成jar包时候,在target目下下也生成了创建的目录,但是在本地打开其中的excel,发现文件已经损坏,就是用maven命令后,生成的文件已经损坏,所以代码去读取文件的时候总是读不到。
解决办法:不要再/src/main/resources下面创建目录存储模板。建议在工程目录下创建,然后存放模板,使用这种方式就不会出现将excel文件损坏情况。
二:引入第三方JAR包
通过maven中管理Jar包,比如第三方只给了jar包,没有再maven仓库中,需要自己去编译,然后在pom.xml中配置,也可以用本地依赖方法,
<dependency>
<groupId>com.hope.cloud</groupId> <!--自定义-->
<artifactId>CCP_REST_SMS_SDK</artifactId> <!--自定义-->
<version>1.0.0</version> <!--自定义-->
<scope>system</scope> <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
<systemPath>${basedir}/libs/CCP_REST_SMS_SDK-1.0.0.jar
</systemPath> <!--项目根目录下的lib文件夹下-->
</dependency>
这种是某些SDK没有在maven仓库提供,所以直接依赖本地。
但是用maven build的时候,需要在<build></build>中添加如下代码:
<resources>
<resource>
<directory>${project.basedir}/libs</directory>
<targetPath>BOOT-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<targetPath>BOOT-INF/classes/</targetPath>
</resource>
</resources>
需要打包在BOOT_INF下,否则在调用第三方接口时候,会出现找不到的class。反正在这个地方我踩了好久的坑,特别还有就是第三方SDK不是maven工程,所有的依赖jar包都是在一个目录下这种,小心第三方中的依赖包版本是否和我们自己依赖包有冲突,特别是引用gson这种。解决包冲突可以用 dependency analyzer 插件去检查。
其实每一个开发的人,在项目中都会遇到踩过坑的问题,记录下来,这样自己也可以发现问题,别人也会借鉴下,当然自己很多地方写的不足,如果大家在项目中遇到过其他的坑点,在下方留言。