• Maven打包SpringBoot遇到的坑


    本文主要汇总,笔者在打包时,遇到的坑。
    由于通过IDE打包为war以及jar基本没有问题,因此未作记录。

    一、 没有clean-install-package或者未使用相关的打包插件

    • clean:清除前一次操作的遗留数据。笔者感觉,类似通过IDE打包方式的Export 的 jar File 前,需要clean项目一样,避免奇奇怪怪的错误。

    • install:主要是下载构建至本地厂库,避免打包过程中缺少东西。即,本地的jar安装到maven仓库。

    • package:打包。

    插件笔者选择的是常用的打包插件,执行条件默认是随着Maven package的过程触发 repackage。

    ...
    <build>
    	...
    	<plugins>
    		...
          <plugin>
          	<groupId>org.springframework.boot</groupId>
          	<artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
        </plugins>
     </build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    二、xml、jar、yam等文件未被打包

    可以通过解压缩文件,查看打包后的jar包,检查文件是否在其中。
    打包时,需要手动添加所有的需要的资源。
    如下图的例子

    ...
      <build>
    	<resources>
    		<resource>
    			<directory>src/main/java</directory>
    			<!---路径在src/main/java 下的--->
    			<includes>
    			<!---所有以*.xml为后缀的文件--->
    			<!---src/main/java/任意文件/*.xml --->
    				<include>**/*.xml</include>
    			</includes>
    		</resource>
    		<resource>
    			<directory>src/main/resources</directory>
    			<includes>
    				<include>**/*.Properties</include>
    				<include>**/*.xml</include>
    			</includes>
    		</resource>
    	</resources>
    	...
      </build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    三、打包后路径项目结构改变,导致资源找不到

    常见的比如:

    mybatis-plus路径可以写为是(此处不是yam的写法):

    mybatis-plus.mapper-locations:classpath:com/note/mapper/xml/*.xml
    
    • 1

    但打包后找不到,只能写为:

    mybatis-plus.mapper-locations:com/note/mapper/xml/*.xml
    或者
    mybatis-plus.mapper-locations:classpath*:com/note/mapper/xml/*.xml
    
    • 1
    • 2
    • 3

    又或者,找不到Springboot配置文件,需要手动添加路径,或者一些写在项目中的.xml,需要手动添加扫描文件等问题

    @SpringBootApplication
    @MapperScan("com.XXX.mapper")
    @EnableTransactionManagement
    @PropertySource({"classpath:application.Properties"})
    public class MainApplication {
    	public static void  main(String[] args) {
    		SpringApplication.run(MainApplication.class, args);
    		
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    四、本地导入的依赖,打包后程序寻找不到

    此处以本地导入达梦数据库的JDBC为例
    1.需要在resources下创建一个lib文件夹,用于装载所有的包
    2.导入本地包的位置

    ...
    <dependencies>
    ...
    	<dependency>
    	     <groupId>com.dameng</groupId>
    	     <artifactId>dm-jdbc</artifactId>
    		 <version>1.8</version>
    		 <!---这里是一些关于依赖的信息--->	
    		 <scope>system</scope>
    		 <!---范围必须是系统--->	 <<systemPath>${project.basedir}/src/main/resources/lib/DmJdbcDriver18.jar</systemPath>
    		<!---该处则是本地包的路径--->
    		 <!---${project.basedir}是参数,不用更改,如果报错可以忽略--->
    		</dependency>
        <dependency>
    </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3.还需要启用这个范围,否则打包后的jar包,依然无法导入该依赖

    ...
    <build>
    ...
     	<plugins>
          <plugin>
          	<groupId>org.springframework.boot</groupId>
          	<artifactId>spring-boot-maven-plugin</artifactId>
          	<configuration>
                <includeSystemScope>true</includeSystemScope>
            </configuration>
            <!------>
          </plugin>
        </plugins>
    </build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    连夜解决 maven 阿里云镜像无法下载 gexin-rp-* 的问题
    【Markdown】 Markdown 操作备忘录
    Mysql之数据处理及数据汇总函数
    Qt网络编程之搭建Udp通信【单播、组播、广播】
    汉诺塔问题
    Azure Function 时区设置
    基于SSM + MySQL的零食购物平台系统的设计与实现源码
    数据库系统及应用复习——第二章关系数据库
    使用 Prometheus 监控 eKuiper 规则运行状态
    发布订阅机制和点对点机制
  • 原文地址:https://blog.csdn.net/weixin_46949627/article/details/125567211