前言
阅读本博客之前读者需要有一个maven的项目
1. 编译项目生成jar包
首先进入IDEA中,如果是springboot项目,它内置了maven的打包工具,否则需要在pom.xml文件中添加插件,如图
<!-- 打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.1.3</version>
</plugin>
然后刷新一下maven。接着点击右边测标栏maven,找到生命周期下的clean,点击它,先清理再打包。然后点击package进行打包。
注:打包过程可能会出现错误,错误原因放在文章后文讲解
等待编译,编译会根据项目的大小而时间不同....
打包成功后可在左边项目中找到 target 目录下看到已经打包好的 jar 包了。
2. 在本地部署项目
选中打包好的 jar 包,右击鼠标,在文件夹下打开它。
进入资源管理器后在当前目录下输入cmd回车,在该目录下使用终端来运行项目。
进入终端后输入执行 jar 包的指令,然后回车执行即可启动项目
此处也可能有读者存在报错信息,后文一并讲解
3. 测试
打开 Postman 工具进行测试,验证我们启动的项目是否成功,随便测试一个接口
我以登录接口为例
可见测试成功,项目在本地打包及部署即完成了。下文讲解从打包到部署途中大部分读者可能会出现的问题及解决方案
4. 常见问题
4.1 无效的标记: --release
一开始在打包项目时,点击package时在编译中出现 无效的标记: --release 错误。这是因为我们在编译项目时使用的JDK版本和jre的版本不一致导致的。
解决方案:尽量保证编译的JDK版本和jre版本保持一致。在我的项目中,编译使用的是JDK17版本,而jre却是JDK1.8版本,这时需要我们把jre的JDK版本也改为17版本即可
步骤:
4.1.1 动态切换JDK版本
如果我们电脑中下载了多个版本的jdk,而某些需要,我们要切换 jre 的版本,这时就需要在环境变量中动态的设置jdk版本了。
首先在系统变量中新建一个变量名为 JAVA_HOME , 路径为 %JAVA_HOME17%,这里的17是当前我设置的JDK版本为17。
新建几个对应的JDK版本的环境变量名,如下图,之后就可以通过修改 JAVA_HOME 变量里的数据来动态切换需要的JDK版本了,前提是其他的JDK安装的路径要与配置变量选择的路径一致!!
通过在cmd中输入 java -version 可以检测切换的jdk版本是否成功
4.2 常用工具的版本冲突问题
错误信息:
class lombok.javac.apt.LombokProcessor (in unnamed module @0x49392256) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x49392256
注意错误信息,我们可以直接把错误信息拿去问ai帮分析,这段错误表明 我们当前 java 版本与工具 Lombok 版本不兼容的问题,如果读者在项目中使用了Lombok工具的话,在打包时可能出现这类问题。原因是java9以后得版本不适配当前使用的Lombok版本
解决:选择升级Lombok版本或者降低java版本至9以下,这里我选择升级Lombok版本至最新版1.18.32,然后刷新一下maven,再次打包即可生成 jar 包。
4.3 端口占用
这是因为我们在本地部署springboot项目时,默认的端口号是8080端口,而我们在IDEA中也启动了项目,导致8080端口被IDEA启动项目时占用了。
解决:1.可以在IDEA中,application.yml 文件配置启动的端口为其他端口,如9090
2. 结束在IDEA中的进程,再运行jar包.
4.4 加载主类出现错误
错误信息:
加载主类 org.springframework.boot.loader.JarLauncher 时出现 LinkageError java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/JarLauncher has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0
错误原因:
这个错误是因为org.springframework.boot.loader.JarLauncher
类被更高版本的Java编译器编译(class文件版本为61.0,即Java 17),而你当前的Java运行时环境版本较低(只支持到class文件版本55.0,即Java 11),导致无法正确加载该类。
把JRE切换到17即可,如4.1.1小节所示。
切换过后再执行命令即可成功部署项目
注:如果项目中有使用redis,部署时需要把redis服务打开!!!
以上就是springboot 打包及本地部署的全过程以及常见问题的解决了,如果这篇文章能帮到读者,小编荣幸至极
更新时间 2025/1/21
5. 属性配置方式
我们把项目打包成一个 jar 时,交给运维或者客户的是一个 jar 文件,而他们想要修改其中的属性,比如修改端口号、等其他属性时,这时候就需要通过几个属性配置的方式来更改其中的属性了。以下是常见的属性配置方式
- 项目中的resources目录下的application.yml
- jar 包所在目录下的application.yml
- 操作系统环境变量
- 命令行参数
以上的优先级从上往下越来越高
1.首先是resource目录下的application.yml,通过修改其中属性的配置来达到目的,缺点是只能我们在打jar包之前修改,拿给别人时是无法修改的,而且每次修改其中属性,都要重新打包,很鸡肋
2.修改jar 包所在目录下的application.yml 的方式比较友好,只需要在生成的 jar包 的同级目录下再提供一个 application.yml 文件即可,里面可以修改想要修改的属性
3.操作系统环境变量,不推荐此用法,因为以后部署项目是部署在第三方服务器上,并且环境变量配置过多,导致我们电脑自身的环境变量变多而不易管理。
4.命令行参数,即在运行jar包时在后面添加几个参数来修改属性,此操作优先级最高。这里我以修改端口号为例
项目已成功在7070端口启动。
以上4中方式,第2中是最推荐使用的。
6. 多环境开发-Profiles
我们写好的程序以后要运行在同的环境之中,比如开发环境、测试环境、生产环境。不同的环境配置的信息都是不一样的,连接的数据库等信息也不同。以下是3种配置不同环境修改配置信息的做法。
6.1 多环境开发的单文件使用
首先我们需要明确三个问题
- 在单个文件中,如何分隔不同环境的配置?
- 如何指定哪些配置属于哪个环境?
- 如何指定哪个环境的配置生效?
对于问题1,不同的环境用 " --- " 分隔
对于问题2,在指定的环境中给环境起名称,如下图,这里以更改端口号为例进行演示
对于问题3,指定生效的环境,可以这样配置
测试:
可以看到,通过单文件配置多环境开发的方式是可以的,不过这样比较繁琐,且不容易维护,下面介绍多文件。
6.2 多环境开发的多文件使用
顾名思义,就是要部署到多少个环境中去,就提供多少个配置文件
采用文件名命名方式来区分哪个文件对应哪个环境,如application-dev.yml 代表的是开发环境,里面配置开发相关的属性,再如application-test.yml 代表的是测试环境、application-pro.yml 代表的是生成韩环境,最后通过application.yml 文件来指定特定环境下指定某些部分的配置生效
以下还是通过更改端口号来演示多文件配置不同环境开发是否生效
在application-dev.yml 文件中
在application-test.yml 文件中
在application-pro.yml 文件中
在application.yml 文件中指定激活的环境
接下来测试一下,看启动的端口号
确实改成了test环境下指定的端口号,说明测试成功了。
6.3 多环境开发-Profiles-分组
即使在多文件配置中修改配置信息,在每个不同的环境对应的配置文件都要书写例如:服务器相关配置、数据源相关配置、自定义配置等信息,导致每个环境的配置文件都要书写这么多的信息,很繁琐。Profiles还为我们提供了配置文件分组的功能
把不同配置信息写成一个文件,有多少个相关配置就起多少个文件,命名方式例如:application-devServer.yml 这是服务器相关配置的文件,再如application-devDB.yml 这是数据源相关配置信息...之后就可以进行分组了,接下来进行简单的模拟
application.yml 用来指定分组,application-devDB.yml用来配置数据源相关的配置,application-devSelf.yml用来配置自定义的配置信息,application-devServer.yml用来配置服务器相关的配置
在application.yml 文件中去指定分组
测试:
生效了。以上就是多环境开发下的配置
每篇一言:
我们在相同的空间遇见不同时间的我们.