SpringBoot项目的jar包打包及运行
程序员文章站
2024-02-07 17:25:52
...
SpringBoot项目的jar包打包运行
环境
系统:window 10
软件:IntelliJ IDEA 2019.3.1 (Ultimate Edition)
JAVA : 1.8.0
方式一、用spring-boot-maven-plugin打包
- 配置打包插件
本例中有两种配置方式,我采用的是第一种。
- 配置一:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
- 配置二:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.jiancangji.Application</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
- 打包
- 在idea中的Maven窗口下依次点击clean、package
- 用命令执行
在idea的Terminal窗口中执行
或者Win+R打开DOC窗口执行,这两种方式都是一样的。
- 运行jar包
打包命令执行后会在target目录下(假设你的编译路径是在target)生成jar包。
在idea的Terminal或者是在PowerShell窗口中执行
- 可能出现的问题
运行过程可能会抛异常:提示没有找到主清单属性。这个一般是在jar包中的MANIFEST.MF中没有生成Main-Class
这个网上有许多解决方案,再次不做赘述。
方式二:用appassembler-maven-plugin打包
本方法可以在编译路径下根据不用环境生成不同的执行文件.bat/.sh 方便运行jar包。
- 配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assemble</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- lib目录中jar的存放规则,默认是${groupId}/${artifactId}的目录格式,flat表示直接把jar放到lib目录 -->
<!--没有路径文件夹(如com/apache),如果没有这个选项则放在lib下的jar包会被com/apache类似的多层文件夹包裹起来-->
<repositoryLayout>flat</repositoryLayout>
<!--生成的项目的目录位置,这里的client是项目的名称,你可以根据你的需要自己随便命名-->
<assembleDirectory>${project.build.directory}/jcjserver</assembleDirectory>
<!-- 打包的jar,以及maven依赖的jar放到这个目录里面 -->
<repositoryName>lib</repositoryName>
<!-- 配置文件的目标目录 -->
<configurationDirectory>conf</configurationDirectory>
<!-- 从哪里拷贝配置文件 -->
<configurationSourceDirectory>src/main/resources</configurationSourceDirectory>
<!-- 拷贝配置文件到上面的目录中 -->
<copyConfigurationDirectory>true</copyConfigurationDirectory>
<includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
<!--java启动参数-->
<extraJvmArguments>-Xms128m</extraJvmArguments>
<binFileExtensions>
<unix>.sh</unix>
</binFileExtensions>
<!-- 生成linux, windows两种平台的执行脚本 -->
<platforms>
<platform>windows</platform>
<platform>unix</platform>
</platforms>
<programs>
<program>
<!--指定主类,脚本名。会生成shell/bat两种类型,也可用platforms指定运行平台-->
<mainClass>com.jiancangji.Application</mainClass>
<!-- 生成的脚本文件的名称,比如start.sh,你也可以根据你的需要命名成其他名字 -->
<name>jcjServer</name>
</program>
</programs>
</configuration>
</plugin>
- 打包
执行打包命令:
D:\Idworkspace\jmsejcjserver>mvn clean package appassembler:assemble
- 运行jar包
执行打包命令后会在编译路径target下生成你在pom.xml配置的路径文件。
该文件有三个目录:
进入bin路径下双击执行脚本即可。(window用.bat脚本,linux用.sh脚本) - 可能出现的问题
- 双击执行脚本,闪退,logs目录也没有输出。遇到这种情况时放弃双击bat/sh脚本,改用命令去执行,可定位错误。
- 输入行太长。命令语法不正确。
- 输入行太长。命令语法不正确。
解决方法
用编辑器打开bat文件,找到CLASSPATH值,将后面的所有依赖用通配符*代替。
2. 提示无法找到主类:xxxx
可能出现的问题是:在pom.xml文件中用parent继承了springboot的依赖。可换种继承方式。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 无法找到第三方jar包,抛异常ClassNotFound
暂未解决。