一个项目是分模块开发的,项目A是个工具包,没有第三方依赖,目录如下:
--src
--main
--java
--resources
--db
--sqlite.db
A的一个函数功能就是将A的resources目录下的db/sqlite.db文件拷贝到指定的目录下
InpuStream is = this.getClass().getClassLoader().getResourceAsStream("/db/sqlite.db");
Files.copy(is,dirPath);
现有一个SpringBoot项目B,通过maven引入A
B在idea运行时A没有报错
B打包为jar包后,命令行运行A报错
获取到的InputStream为null,Files.copy报NPE
将B打包后的jar解压后,lib目录下的A.jar内是有文件的
这个路径究竟该如何获取?
"db/sqlite.db"和"/db/sqlite.db"都不行
this.getClass().getResourceAsStream("");
也都不行
用Guava的Resources工具也不好使,这种难不成写代码一套,打包一套吗?
A 的pom文件如下
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.db</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.db</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
B 的pom文件如下,由于Parent是自己的项目,没有继承spring-boot-parent-starter,所以B的pom多写了些配置
<build>
<finalName>access\_server</finalName>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.db</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.db</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.gree.hvac.access.AccessApplication</mainClass>
<classifier>boot</classifier>
<layout>ZIP</layout>
<executable>true</executable>
<excludeDevtools>true</excludeDevtools>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
不确定是不是Maven插件版本问题。
以下方式是没问题的
读取当前的 jar的资源 或 如果是Springboot读取其他jar里面的资源:
我的 A:
B:
供你参考。