springboot项目打包与部署
1、springboot项目lib包、config配置文件打包配置。
maven其实是由各种插件组成的,执行mvn 命令时,都是调用的对应的maven插件来原型的,如mvn compile、mvn install等调用的是maven-compiler-plugin、maven-install-plugin插件。打包使用的插件是在pom文件中配置的,其中pom中plugins
下的 plugin
是真实使用的,而 pluginManagement
下的 plugins
下的 plugin
则仅仅是一种声明。pom引入插件后可以在本地仓库中看到对应的插件。
打包的时候,我们希望把项目依赖的jar包打包到lib目录,把配置文件单独打包到config目录(不要打入项目所在jar包,方便后期部署运维时修改配置文件),项目单独一个jar包和lib目录、config目录在同一级目录下。pom配置文件如下:
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.XXX.SpringbootApplicXXXation</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>
jar-with-dependencies
</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.XXX.SpringbootApplication</mainClassXXX>
</manifest>
<manifestEntries>
<!--MANIFEST.MF 中 Class-Path 加入资源文件目录 -->
<Class-Path>./config/</Class-Path>
</manifestEntries>
</archive>
<excludes>
<exclude>config/**</exclude>
</excludes>
</configuration>
</plugin>
<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>
<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/config</directory>
<includes>
<!-- <include>*.properties</include> -->
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/config</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
需要特殊说明的是,addClasspath代表添加类路径,classpathPrefix代表把 lib/目录下的内容都添加到了类路径下,mainClass 指定启动主类,Class-Path 代表把config目录设为资源目录,这些信息都记录在项目jar包的Manifest.mf 文件里,执行jar包的时候,会根据这个文件找启动类、依赖jar所在类路径、和配置文件。这里的类路径lib/是相对路径,因此部署的时候要注意,lib目录要放在项目jar包所在目录下,因为运行jar包时,会根据Manifest.mf 文件在jar所在目录去找 lib/目录 ,如果放置错位置了,会报类找不到的错误。
2、linux下项目部署
(1)添加用户
groupadd -g 202 usergroup
useradd -u 2021 -d /home/user -g usergroup-s /bin/csh -m user
passwd user
(2)安装jdk,并配置环境变量
这里主要说下环境变量配置,如果设置环境上通用jdk环境变量,就在/etc/profile 里配置。如果只配置该用户下的java环境变量,就在用户家目录下的 .bashrc
或.cshrc 下设置,csh和bash的配置是不同的。因为我的用户使用的是csh,因此我在.cshrc下配置:
# .cshrc
setenv JAVA_HOME /usr/java/jdk1.8.0_121
setenv CLASSPATH .:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
setenv PATH $JAVA_HOME/bin:/bin:/usr/sbin:/usr/bin:/root/bin
这里注意下,如果不在path下添加/bin:/usr/sbin:/usr/bin:/root/bin,会导致pwd 、ll、vim等命令都会不可用,执行命令时会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。如果不添加$JAVA_HOME/bin,就找不到该版本的jdk,java命令就不能执行,执行java命令时会到该目录下找 javac java jar等工具。
如果用户使用的bashrc,那么环境变量配置就要用export:
# .bashrc
EXPORT JAVA_HOME=/usr/java/jdk1.8.0_121
EXPORT CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EXPORT PATH=$JAVA_HOME/bin:/bin:/usr/sbin:/usr/bin:/root/bin
配置好后,source .cshrc 或source .bashrc 刷新环境变量,java -version 查看jdk版本号。
(3) 项目部署与启动
把项目jar包 test.jar、 lib/ 、config/目录上传到用户家目录下,并创建 logs目录,然后使用 java -jar test.jar 启动项目即可。