springboot项目中引入自定义三方jar

jasmine 于 2020-05-02 发布

场景一

在一些特殊的情况下,需要导入本地的jar包到项目中,这时候需要做一些设置才能在打包的过程中不会出现找不到jar包的问题。

解决方法

1、项目根目录下创建lib目录,将jar放到该目录下

song-publish
├──lib
   └── opencv-346.jar
   └── nvwa-http-util-1.0.1-SNAPSHOT.jar
├──src
├──pom.xml

2、pom.xml文件中配置引用依赖

<dependency>
    <groupId>com.nvwa</groupId>
    <artifactId>nvwa-opencv</artifactId>
    <version>1.0.1-SNAPSHOT</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/opencv-346.jar</systemPath>
</dependency>
<dependency>
    <groupId>com.nvwa</groupId>
    <artifactId>nvwa-http-util</artifactId>
    <version>1.0.1-SNAPSHOT</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/nvwa-http-util-1.0.1-SNAPSHOT.jar</systemPath>
</dependency>

3、打包部署的时候需要将jar,package到lib中,pom.xml中还需要添加includeSystemScope为true

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <includeSystemScope>true</includeSystemScope>
            </configuration>
        </plugin>
    </plugins>
</build>

场景二

我们在使用opencv的时候需要引入本dll地库

解决方案

增加配置类

1、在不同系统中需要加载不同的文件,在初始化的时候进行库的加载

@Configuration
@Slf4j
public class OpencvConfig {
    @Bean
    public void opencvLoad() {
        //判断运行系统
        String osName = System.getProperties().getProperty("os.name").toLowerCase();
        log.info("---runtime environment:{}", osName);
        //linux环境下
        if (osName.contains("linux")) {
            System.load("/opencv/opencv-3.4.6/build/lib/libopencv_java346.so");
            log.info("---linux laod opencv libopencv_java346.so done");
        }
        //window环境下
        if (osName.contains("win")) {
            System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
            //System.load("E:\\IdeaProjects\\da-publish\\lib\\opencv_java3416.dll");
            log.info("---linux laod win opencv_java3416.dll done");
        }
    }
}