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

          

  • 相关阅读:
    PZISP自动下载软件运行时出现“应用程序无法启动,因为应用程序的并行配置不正确”
    分析Memcached客户端如何把缓存数据分布到多个服务器上
    WebApi参数传递总结
    [NHibernate]一对多关系(级联删除,级联添加)
    提高SQL查询效率
    jquery validate 详解
    Winform子窗体刷新父窗体
    Windows如何修改MySQL用户root密码
    MySQL 5.6 for Windows 解压缩版配置安装
    获取地图文档(*.mxd)中比例尺问题
  • 原文地址:https://www.cnblogs.com/luckyna/p/11563195.html
Copyright © 2020-2023  润新知