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>

二、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>

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

常见的比如:

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

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

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

mybatis-plus.mapper-locations:com/note/mapper/xml/*.xml
或者
mybatis-plus.mapper-locations:classpath*:com/note/mapper/xml/*.xml

又或者,找不到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);
		
	}
}

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

此处以本地导入达梦数据库的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>

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

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

版权声明:本文为weixin_46949627原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。