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  启动项目即可。