背景
对于SpringBoot项目,我们可以直接使用Maven将项目打成一个可执行Jar包,上传到Linux服务器启动运行。
原始打包
对于打成单独一个jar包的情况,我们只需要引入打包插件,执行 mvn package即可
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
生成的jar包默认在 项目的编译目录的根目录下
对于这种打包方式,配置文件和第三方依赖包都包含在jar包里,项目运行的过程中,需要改动配置文件的话需要重新打包并部署。
SpringBoot读取配置文件(application.yml)的优先级
- jar包同级目录的config目录
- jar包同级目录
- classPath(即resources目录)的config目录
- classPath目录
还有一种最高优先级的方式是项目启动时通过命令的方式指定配置文件:
java –jar -Dspring.config.location=xxx/xxx/xxxx.properties xxxx.jar
所以我们只需要把配置文件拷贝出来放到与jar包同级的config目录中即可
配置文件和第三方jar包外置
所以我们只需要配置 配置文件的打包位置为jar包同级的config目录,并将jar包内的配置文件剔除即可
打包方式与原来无差别 执行 mvn package即可
<build>
<defaultGoal>compile</defaultGoal>
<finalName>${project.artifactId}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.outputDirectory}</targetPath>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.testOutputDirectory}</targetPath>
<filtering>false</filtering>
</resource>
<!-- 将指定配置文件copy到config目录,通常是那些可以在jar包外部修改的文件 -->
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}/${project.artifactId}/config</targetPath>
<includes>
<include>application.yml</include>
<include>application-dev.yml</include>
<include>application-test.yml</include>
<include>logback.xml</include>
</includes>
</resource>
</resources>
<plugins>
<!-- 配置资源文件的打包路径 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<!-- 可选配置 -->
<configuration>
<source>1.8</source>
<!-- 源代码使用的JDK版本 -->
<target>1.8</target>
<!-- 生成的目标class文件的JDK编译版本 -->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<outputDirectory>${project.build.directory}/${project.artifactId}/</outputDirectory>
<!-- 排除不需要打进jar包的文件,也就是上面config目录中的文件 -->
<excludes>
<include>application.yml</include>
<include>application-dev.yml</include>
<include>application-test.yml</include>
<include>logback.xml</include>
</excludes>
<archive>
<!-- 程序入口,即main函数 -->
<manifest>
<mainClass>com.shsnc.report.Run</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<useUniqueVersions>false</useUniqueVersions>
</manifest>
<manifestEntries>
<Class-Path>config/ .</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<!-- 把jar复制到target目录下的lib目录下 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- ${project.build.directory}就是我们通常看到的target目录 -->
<outputDirectory>${project.build.directory}/${project.artifactId}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 跳过测试编译 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
我们配置的jar包和配置文件在项目的编译目录下的/artifactId/下,打包完成后如图所示
配置文件
第三方依赖包
部署方式
将打包时生成的jar包上级目录,我这里也就是ccic_report,压缩后上传到服务器,解压并进入目录
执行 java -jar xxx.jar即可