-
背景:
springboot项目开发完毕后,构建成jar包可直接运行(nohup java -jar xxx.jar &),无需再部署至tomcat,使用起来很方便。 但是实际在公司应用中需要做打包配置,把项目依赖的配置和第三方jar抽取出来,做成如下所示的结构,目的在于:实际生产环境的配置和本地配置肯定有区别。这样在实际上线时只需要单独修改配置文件重启即可,另外如果某个依赖jar有修改,则只需要替换依赖的jar并重启即可,不需要重新打包。
- 配置项目pom.xml所依赖插件:
<build>
<!--jar包名字 -->
<finalName>eureka-server</finalName>
<!--打包时 排除jar包里面的配置文件,后面会将配置文件打在jar同级的config目录下 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>*.properties</exclude>
<exclude>*.xml</exclude>
</excludes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!--利用maven-jar-plugin插件打jar包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<!--设置jar依赖的第三方jar的目录前缀 和下放的copy-dependency所设置的目录相对应 -->
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib</classpathPrefix>
<!--配置jar启动类 -->
<mainClass>com.demo.springcloud.mj.eurekaserver.EurekaServerApplication</mainClass>
</manifest>
<manifestEntries>
<Class-Path>./</Class-Path>
</manifestEntries>
</archive>
<excludes>
<exclude>*.properties</exclude>
<exclude>*.yml</exclude>
<exclude>*.xml</exclude>
<exclude>config/**</exclude>
</excludes>
</configuration>
</plugin>
<!--设置jar所依赖的三方jar包存放的路径 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dep</id>
<phase>prepare-package</phase>
<goals>
<goal>
copy-dependencies
</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<!--利用maven的assembly插件 打包-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>1.0</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>${basedir}/src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
- 配置assembly.xml 文件
-
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <!--与pom文件excution id相对应--> <id>1.0</id> <formats> <!--设置assembly包文件格式--> <format>tar.gz</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <!-- disable the creation of root's distribution dir in the archive --> <fileSets> <!-- config files --> <fileSet> <directory>${basedir}/src/main/resources</directory> <excludes></excludes> <includes> <include>*.properties</include> <include>*.xml</include> </includes> <!--设置文件权限--> <fileMode>0644</fileMode> <!--设置配置文件输出的外部文件夹--> <outputDirectory>/config</outputDirectory> </fileSet> <!-- scripts --> <fileSet> <directory>${basedir}/src/main/assembly/bin</directory> <includes> <include>*.sh</include> <include>*.bat</include> </includes> <fileMode>0755</fileMode> <!--设置项目相关脚本输出的外部文件夹--> <outputDirectory>/bin</outputDirectory> </fileSet> <!-- executable jar --> <fileSet> <directory>${project.build.directory}</directory> <!--设置项目jar以及项目依赖的第三方jar输出的外部文件夹--> <outputDirectory>/</outputDirectory> <includes> <include>*.jar</include> <!--注意此处是将项目依赖的第三方jar全部copy至assembly打包出来的目录中 如果没有此段,则lib目录是在target目录下,而不会存放于assembly打包的目录中--> <include>/lib/*</include> </includes> <fileMode>0755</fileMode> </fileSet> </fileSets> </assembly>
- 执行maven打包命令即可。 将打包后的文件eureka-server-1.0.tar.gz 上传至服务器并解压。 修改配置文件为生产环境配置(vim /config/application.properties) 启动boot项目即可 cd bin ./startup.sh 即可启动boot项目