springboot第三方包剥离至lib文件夹下

发布时间 2023-03-22 21:17:21作者: God-slayer

描述

介绍项目打包时剥离第三方依赖包至lib文件夹下,减少svn太大问题(svn无法比对二进制文件差异,因此是累加,特别占用磁盘空间)

步骤一

1、修改pom.xml,构建\BOOT-INF\lib\下只包含study的jar包,实现构建后本服务的jar包结构为:

|--META-INF
|--BOOT-INF
    |--classes

    |--lib
        |--study-dao-1.0.1-SNAPSHOT.jar
        |--study-common-1.0.1-SNAPSHOT.jar
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <layout>ZIP</layout>
        <includes>
            <include>
                <groupId>com.study</groupId>
                <artifactId>study-dao</artifactId>
            </include>
            <include>
                <groupId>com.study</groupId>
                <artifactId>study-common</artifactId>
            </include>
        </includes>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

步骤二

修改pom.xml,将jar包中的lib文件夹和本服务的jar包放在同一个文件夹下,目录结构如下:

|--lib
|--xxx.jar
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>target/lib</outputDirectory>
                <excludeArtifactIds>study-dao,study-common</excludeArtifactIds>
            </configuration>
        </execution>
    </executions>
</plugin>

问题记录

问题1:

调用接口时报错:Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseSelectProvider。

解决方案:

1.tk.mybatis.mapper-spring-boot-starter版本号从1.1.4变更为1.2.4

2.Application启动类中@MapperScan的引用包变更,从import org.mybatis.spring.annotation.MapperScan; 变更为 import tk.mybatis.spring.annotation.MapperScan;

问题2:

将lib包单独打包后,springboot会优先加载lib下jar包,如果对第三方包源码有修改的地方,建议直接把第三方包源码放到项目内部,不能单独修改某一个类文件