springboot两种打包方式

Posted dddfeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot两种打包方式相关的知识,希望对你有一定的参考价值。

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

三.所有相关依赖打到一个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,就可以了

以上是关于springboot两种打包方式的主要内容,如果未能解决你的问题,请参考以下文章

springboot两种打包方式

Springboot中IDE支持两种打包方式,即jar包和war包

SpringBoot项目的两种打包方式分析

springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?

Docker——使用Dockerfile构建SpringBoot项目(打包 & 部署 & 运行)

Docker——使用Dockerfile构建SpringBoot项目(打包 & 部署 & 运行)