springboot应用打包的两种方式

一.纯手工方式

1).在工程的根目录打开cmd命令行

2).执行maven clean install命令,打成jar包,此处有坑(不会打依赖包进去)

3).需要使用maven clean package dependency:copy-dependencies使命,把相关依赖包输出

3).命令执行完成后,会在target/目录下生成xxx.jar包和一个dependency目录(依赖包所在目录)(具体记不清楚了)

4).找一个地方新建一个文件夹(随意),我这是c:/test/,在test目录下再新建一个文件夹lib

5).把生成的依赖包和打好的xxx.jar包都扔到c:/test/lib/中

6).在c:/test/目录中执行java -Djava.ext.dirs=lib com.xxx.App(主启动类)命令后,springboot程序就可以启动了

 

纯手工方式填坑:

1)).不建议使用此种方式来执行程序,由于-Djava.ext.dirs参数是收ext class loader来加载的,一般的java程序是使用app class loader来加载代码的

2)).由于我的代码用了HS256加密算法,用这种方式就报了HS256加密方式不可用的异常

3)).可能还存在其他的坑,暂时没遇到

二.使用maven打包插件:appassembler方式

此各方式在打包过后,批处理、日志目录、配置文件相关、等会自动生成,不需要手动写启动脚本

 

1.在<plugins>标签内加入以下配置

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>2.2.0.RELEASE</version>
</plugin>
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>appassembler-maven-plugin</artifactId>
  <version>1.10</version>
  <configuration>
    <!-- 生成linux, windows两种平台的执行脚本 -->
    <platforms>
      <platform>windows</platform>
      <platform>unix</platform>
    </platforms>
    <!-- 打包后的根目录 -->
    <assembleDirectory>${project.build.directory}/product</assembleDirectory>
    <!-- 打包的jar,以及maven依赖的jar放到这个目录里面 -->
    <repositoryName>lib</repositoryName>
    <!-- 可执行脚本的目录 -->
    <binFolder>bin</binFolder>
    <!-- 配置文件的目标目录 -->
    <configurationDirectory>conf</configurationDirectory>
    <!-- 拷贝配置文件到上面的目录中 -->
    <copyConfigurationDirectory>true</copyConfigurationDirectory>
    <!-- 从哪里拷贝配置文件 (默认src/main/config) -->
    <copyConfigurationDirectory>updown/src/main/resources</copyConfigurationDirectory>
    <!-- lib目录中jar的存放规则,默认是${groupId}/${artifactId}的目录格式,flat表示直接把jar放到lib目录 -->
    <repositoryLayout>flat</repositoryLayout>
    <encoding>UTF-8</encoding>
    <logsDirectory>logs</logsDirectory>
    <tempDirectory>tmp</tempDirectory>
    <programs>
      <program>
        <id>udApp</id>
        <!-- 启动类 -->
        <mainClass>com.bjrun.UpDownMain</mainClass>
        <jvmSettings>
          <extraArguments>
            <extraArgument>-server</extraArgument>
            <extraArgument>-Xmx1G</extraArgument>
            <extraArgument>-Xms1G</extraArgument>
          </extraArguments>
        </jvmSettings>
      </program>
    </programs>
  </configuration>
</plugin>

2.在项目根目录打开cmd命令

3.执行mvn clean package appassembler:assemble命令打包程序

4.3步命令执行完成后,会在target目录下输出程序的相关项

5.进到target/product目录下,双击xxx.bat批处理文件,即可运行springboot程序

此方式填坑

1).打开批处理文件时,一闪而过,Logs目录也没有输出,遇到这种情况,需要先打开cmd命令窗口,进到批处理所在目录,执行批处理文件,可以看到报错信息

2).由于项目依赖包过多,所以在运行时出现了“输入行太长,命令语法不正确”的错误,修改插件生成的批处理文件,如下

spring boot 打包路径 springboot打包命令_依赖包


三.所有相关依赖打到一个jar包中去

昨天是死活把依赖包打不进一个jar包中去,今天又试了一下,竟然成功了!!!!

需要在pom.xml中添加以下配置

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>2.2.0.RELEASE</version>
  <executions>
    <execution>
      <goals>
        <goal>repackage</goal>
      </goals>
    </execution>
  </executions>
</plugin>

直接在idea中maven package,就可以了