1. 不分离打包(默认)

SpringBoot初始化建立项目默认的spring-boot-maven-plugin插件,进行项目打包,这个插件会将项目所有的依赖打入BOOT-INF/lib下,pom文件配置如下:

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

package打包后,打出的是完整的可运行的jar包,根据项目的不同大小不同,整体来说是比较大的。

spring boot 打包排除 spring boot 打包 配置文件_spring

2. 分离打包

替换为maven-jar-plugin打包插件,pom文件修改如下:

<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<configuration>
					<!--不打入jar包的文件类型或者路径-->
					<excludes>
						<exclude>*.properties</exclude>
						<exclude>*.yml</exclude>
						<exclude>*.yaml</exclude>
					</excludes>
					<archive>
						<manifest>
							<!-- 执行的主程序路径 -->
							<mainClass>com.dcxuexi.Springboot03JarApplication</mainClass>
							<!--是否要把第三方jar放到manifest的classpath中-->
							<addClasspath>true</addClasspath>
							<!--生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/-->
							<classpathPrefix>lib/</classpathPrefix>
							<!-- 打包时 MANIFEST.MF 文件不记录的时间戳版本 -->
							<useUniqueVersions>false</useUniqueVersions>
						</manifest>
						<manifestEntries>
							<!-- 在 Class-Path 下添加配置文件的路径 -->
							<Class-Path>config/</Class-Path>
						</manifestEntries>
					</archive>
				</configuration>
			</plugin>
			<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>${project.build.directory}/lib/</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<artifactId>maven-resources-plugin</artifactId>
				<executions>
					<execution>
						<id>copy-resources</id>
						<phase>package</phase>
						<goals>
							<goal>copy-resources</goal>
						</goals>
						<configuration>
							<resources>
								<!--把配置文件打包到指定路径-->
								<resource>
									<directory>src/main/resources/</directory>
									<includes>
										<include>*.properties</include>
										<include>*.yml</include>
										<exclude>*.yaml</exclude>
									</includes>
								</resource>
							</resources>
							<outputDirectory>${project.build.directory}/config</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

先后分别双击执行cleanpackage命令,进行清理和打包。

spring boot 打包排除 spring boot 打包 配置文件_java_02

打包后的结构如下:

spring boot 打包排除 spring boot 打包 配置文件_spring boot_03

使用命令java -jar .\springboot_03_jar-0.0.1-SNAPSHOT.jar启动jar

spring boot 打包排除 spring boot 打包 配置文件_jar_04

这样就完成了配置文件以及lib包和jar的分离了,并且jar在运行的时候会默认去读取config文件夹中的配置,修改起来非常方便。



项目代码