spring boot打包jar中遇到的问题

问题1:关于日期类异常

Exception in thread "main" java.time.DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 0
        at java.base/java.time.temporal.ValueRange.checkValidValue(ValueRange.java:319)
        at java.base/java.time.temporal.ChronoField.checkValidValue(ChronoField.java:718)
        at java.base/java.time.LocalDate.of(LocalDate.java:273)
        at java.base/java.time.LocalDateTime.of(LocalDateTime.java:338)
        at org.springframework.boot.loader.jar.CentralDirectoryFileHeader.decodeMsDosFormatDateTime(CentralDirectoryFileHeader.java:127)
        at org.springframework.boot.loader.jar.CentralDirectoryFileHeader.getTime(CentralDirectoryFileHeader.java:116)
        at org.springframework.boot.loader.jar.JarEntry.<init>(JarEntry.java:58)
        at org.springframework.boot.loader.jar.JarFileEntries.getEntry(JarFileEntries.java:316)
        at org.springframework.boot.loader.jar.JarFileEntries.access$400(JarFileEntries.java:48)
        at org.springframework.boot.loader.jar.JarFileEntries$EntryIterator.next(JarFileEntries.java:366)
        at org.springframework.boot.loader.jar.JarFileEntries$EntryIterator.next(JarFileEntries.java:350)
        at org.springframework.boot.loader.jar.JarFile$2.nextElement(JarFile.java:200)
        at org.springframework.boot.loader.jar.JarFile$2.nextElement(JarFile.java:191)
        at org.springframework.boot.loader.archive.JarFileArchive$EntryIterator.next(JarFileArchive.java:183)
        at org.springframework.boot.loader.archive.JarFileArchive$EntryIterator.next(JarFileArchive.java:168)
        at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:84)
        at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:68)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:49)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)

解决方法:

  • 本地正常运行,打包后运行报错
  • 修改springbootmaven插件版本
			<groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>3.3.2</version>

问题2:端口被jvm占用

当遇到“Web server failed to start. Port 8089 was already in use.”这样的错误时,确实需要采取措施来解决端口冲突问题

解决方案:

管理员权限运行cmd

  1. netstat -aon | findstr :8089
  2. 运行上面命令 8089改为你被占用的端口号
  3. 查询该端口占用的pid
  4. 用任务管理器kill掉

3.

问题描述:

[ERROR] Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:355)
    at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:253)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:886)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:846)
    at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:449)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)

这个错误堆栈信息来自于 Maven 在执行一个 exec-maven-plugin 插件时遇到的失败。org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1) 表明被执行的外部进程或命令以退出码 1 结束,这通常表示出现了某种错误。

解决:

1.检查 Maven 配置:
查看你的 pom.xml 文件中 exec-maven-plugin 的配置。确保 executable 或 commandlineArgs 等属性设置正确。
2.确认你正在尝试执行的命令或程序是否在你的系统上可用,并且路径正确。
查看命令行输出

通常,当 Maven 插件执行时,它会在控制台输出被执行命令的输出。检查这些输出以获取可能的错误信息或更详细的失败原因。

问题4:Unsupported class file major version 61

  • 问题描述:
    错误 “Unsupported class file major version 61” 通常出现在使用 Java 编译器(如 javac)编译的 Java 字节码文件(.class 文件)被 Java 虚拟机(JVM)运行时环境以不兼容的版本加载时。这里的 “major version 61” 指的是 Java 17 编译的类文件版本。

这个错误表明你尝试在一个低于 Java 17 的 JVM 上运行一个用 Java 17 编译的 Java 应用程序

解决方案:

1.大概是JDK和Spring版本不对应,检查对应关系,springboot3至少要jdk17

2.更改项目结构中的 SDK 的版本为 jdk-17。
在这里插入图片描述

方案2引用csdn大培草民的回答

更改项目目录下 pom.xml 中的属性配置,将原先的 21 更改为 17。
最后重新加载所有 Maven 项目。

问题5:Unable to find main class

  • 问题描述:遇到“Unable to find main class”这个错误时,这通常意味着Maven在尝试执行某个任务(如运行Java应用程序或打包成可执行jar)时,没有找到指定的主类(main class)
	<configuration>  
        <mainClass>com.yourcompany.YourApplication</mainClass>  
    </configuration>

解决方案:

可以在插件配置中手动指定主类

问题6:无法解析符号 ‘DateUtil’

import cn.hutool.core.date.DateUtil;

  • 问题描述:当你遇到“无法解析符号 ‘DateUtil’”这样的错误时,通常意味着你的项目中缺少包含 DateUtil 类的库,或者该库没有被正确地添加到项目的依赖中。DateUtil 是 Hutool 工具包中的一个类,用于处理日期和时间。

解决方案:

1.确保你的项目中已经包含了 Hutool 的依赖。对于 Maven 项目,你需要在 pom.xml 文件中添加 Hutool 的依赖
2.解决依赖之间的冲突问题就行

问题7:httpclient :4.5.12 [compile](omitted for conflict with: 4.5.13

  • 问题描述:httpclient:4.5.12 [compile] (omitted for conflict with: 4.5.13) 表示在你的项目中,原本指定了 httpclient 库的版本为 4.5.12 作为编译依赖,但 Maven 在解析依赖时发现了冲突,即项目中其他地方(可能是直接依赖或间接依赖)已经引入了 httpclient 的 4.5.13 版本。

Maven 会根据依赖管理规则(通常是“最近者优先”原则)来解决这种冲突,因此它会选择版本更高的 4.5.13,并忽略 4.5.12 版本。这就是为什么你会看到 omitted for conflict with: 4.5.13 的信息。

解决方案:

在冲突的依赖添加配置

<exclusions>  
        <exclusion>  
            <groupId>org.apache.httpcomponents</groupId>  
            <artifactId>httpclient</artifactId>  
        </exclusion>  
    </exclusions>

问题8:java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘com.sun.tools.javac.tree.JCTree qualid’

  • 问题描述:错误表明 Java 运行时环境在尝试访问某个类的字段时,未能找到该字段。在你提供的错误中,错误发生在尝试访问 com.sun.tools.javac.tree.JCTree$JCImport 类的 qualid 字段时

API 变更:com.sun.tools.javac 是 JDK 的一部分,但它并不是 Java 官方 API 的一部分。这意味着它的内部结构和字段可能会随着 JDK 版本的更新而改变。你很可能在使用的 JDK 版本中,JCImport 类已经不再包含 qualid 字段。
错误的库或代码:你可能在使用一个依赖于特定 JDK 版本内部 API 的库或代码,而你的项目使用的 JDK 版本与该库或代码不兼容。
编译时与运行时环境不一致:你的代码可能在不同于运行时的 JDK 版本上编译。这可能导致编译时存在的字段在运行时环境中不存在。

解决方案:

依赖版本太低导致的,因为新版jdk改动了该类

文末:

  • 还有更多问题,但是很难一一列出,只提供解决思路,具体解决需要大家自己花时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值