spring boot 中so文件引入本地jar包,导致jvmcrash
今天在做小程序视频合成,需要引入视频引擎的so文件和提供的jar包。
1、引入so文件:配置环境变量,调用System.loadLibrary()
2、引入本地jar包,在项目下新建lib文件,把需要的jar包放进去,在pom中添加如下配置
<dependency> <groupId>xxx</groupId> <artifactId>engine</artifactId> <version>1.0</version> <scope>system</scope> <systemPath> ${pom.basedir}/lib/xxx.jar </systemPath> </dependency>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!--这里写上main方法所在类的路径--> <configuration> <includeSystemScope>true</includeSystemScope> <mainClass>com.xxx.SpringBootApplication</mainClass> </configuration> </plugin> </plugins> </build>
先项目下执行mvn package指令,会项目在target目录中打了xxx.jar包
执行java -jar target/xxx.jar
服务启动顺利启动
当调用合成请求时,缺出现jvm crash
原因是JNI实例化报错导致的,报错文件的解析可以参考https://www.cnblogs.com/jiangxiaoyaoblog/p/5723753.html
经排查本问题的原因是so文件也要引入本地jar包,所以需要在运行时指定jar路径,解决方法是
在项目下执行 java -Djava.ext.dirs=./lib -jar target/xxx.jar
问题解决