maven3.0以下引用rt包报错问题解决

本文介绍了解决Maven版本低于3.0时,打包过程中因找不到rt包而导致错误的方法。通过配置maven-compiler-plugin插件添加参数-XDignore.symbol.file,能够有效避免此问题。

当使用maven版本低于3.0的时候,引用到rt包内容的时候,打包会报错的,找不到rt包 

相应的引用包的时候,在pom.xml中增加下面的引用


<build>

        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <!-- inherit version for this plugin from parent pom-->
                <configuration>
                    <compilerArgument>-XDignore.symbol.file</compilerArgument>
                </configuration>
            </plugin>
        </plugins>

    </build>


即可以完美解决问题,还有一个笨的办法就是向私库中导入rt包,然后在下载到本地,但是这种打包是有很大的隐患,所以不建议使用,上述内容都是别人找到,我做一个记录。

D:\JDK21\jdk-21.0.8\bin\java.exe -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\ideaIU\IntelliJ IDEA 2022.2.2\lib\idea_rt.jar=60305:D:\ideaIU\IntelliJ IDEA 2022.2.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\ssm0u4hl\target\classes;D:\maven\maven-repository\org\springframework\spring-core\5.0.0.RELEASE\spring-core-5.0.0.RELEASE.jar;D:\maven\maven-repository\org\springframework\spring-jcl\5.3.31\spring-jcl-5.3.31.jar;D:\maven\maven-repository\org\springframework\spring-context\5.0.0.RELEASE\spring-context-5.0.0.RELEASE.jar;D:\maven\maven-repository\org\springframework\spring-expression\5.3.31\spring-expression-5.3.31.jar;D:\maven\maven-repository\org\springframework\spring-context-support\5.0.0.RELEASE\spring-context-support-5.0.0.RELEASE.jar;D:\maven\maven-repository\org\springframework\spring-tx\5.0.0.RELEASE\spring-tx-5.0.0.RELEASE.jar;D:\maven\maven-repository\org\springframework\spring-aop\5.0.0.RELEASE\spring-aop-5.0.0.RELEASE.jar;D:\maven\maven-repository\org\springframework\spring-beans\5.0.0.RELEASE\spring-beans-5.0.0.RELEASE.jar;D:\maven\maven-repository\org\springframework\spring-jdbc\5.0.0.RELEASE\spring-jdbc-5.0.0.RELEASE.jar;D:\maven\maven-repository\org\springframework\spring-web\5.0.0.RELEASE\spring-web-5.0.0.RELEASE.jar;D:\maven\maven-repository\org\springframework\spring-webmvc\5.0.0.RELEASE\spring-webmvc-5.0.0.RELEASE.jar;D:\maven\maven-repository\org\aspectj\aspectjweaver\1.8.8\aspectjweaver-1.8.8.jar;D:\maven\maven-repository\commons-fileupload\commons-fileupload\1.3.1\commons-fileupload-1.3.1.jar;D:\maven\maven-repository\javax\servlet\jstl\1.2\jstl-1.2.jar;D:\maven\maven-repository\com\baomidou\mybatis-plus\2.3\mybatis-plus-2.3.jar;D:\maven\maven-repository\com\baomidou\mybatis-plus-support\2.3\mybatis-plus-support-2.3.jar;D:\maven\maven-repository\com\baomidou\mybatis-plus-core\2.3\mybatis-plus-core-2.3.jar;D:\maven\maven-repository\com\github\jsqlparser\jsqlparser\1.1\jsqlparser-1.1.jar;D:\maven\maven-repository\org\mybatis\mybatis-spring\1.3.2\mybatis-spring-1.3.2.jar;D:\maven\maven-repository\org\mybatis\mybatis\3.4.6\mybatis-3.4.6.jar;D:\maven\maven-repository\com\baomidou\mybatis-plus-generate\2.3\mybatis-plus-generate-2.3.jar;D:\maven\maven-repository\com\mysql\mysql-connector-j\8.0.31\mysql-connector-j-8.0.31.jar;D:\maven\maven-repository\com\microsoft\sqlserver\mssql-jdbc\6.2.0.jre8\mssql-jdbc-6.2.0.jre8.jar;D:\maven\maven-repository\com\alibaba\druid\1.1.0\druid-1.1.0.jar;D:\maven\maven-repository\com\alibaba\fastjson\1.2.8\fastjson-1.2.8.jar;D:\maven\maven-repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;D:\maven\maven-repository\org\slf4j\slf4j-api\1.7.19\slf4j-api-1.7.19.jar;D:\maven\maven-repository\org\slf4j\slf4j-log4j12\1.7.19\slf4j-log4j12-1.7.19.jar;D:\maven\maven-repository\org\springframework\spring-test\5.0.0.RELEASE\spring-test-5.0.0.RELEASE.jar;D:\maven\maven-repository\org\apache\commons\commons-lang3\3.0\commons-lang3-3.0.jar;D:\maven\maven-repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;D:\maven\maven-repository\commons-io\commons-io\2.5\commons-io-2.5.jar;D:\maven\maven-repository\cn\hutool\hutool-all\4.0.12\hutool-all-4.0.12.jar;D:\maven\maven-repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.29\tomcat-embed-core-9.0.29.jar;D:\maven\maven-repository\org\apache\tomcat\tomcat-annotations-api\9.0.83\tomcat-annotations-api-9.0.83.jar;D:\maven\maven-repository\commons-beanutils\commons-beanutils\1.8.0\commons-beanutils-1.8.0.jar;D:\maven\maven-repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;D:\maven\maven-repository\com\baidu\aip\java-sdk\4.4.1\java-sdk-4.4.1.jar;D:\maven\maven-repository\org\json\json\20160810\json-20160810.jar;D:\maven\maven-repository\com\fasterxml\jackson\core\jackson-annotations\2.10.1\jackson-annotations-2.10.1.jar;D:\maven\maven-repository\com\fasterxml\jackson\core\jackson-databind\2.10.1\jackson-databind-2.10.1.jar;D:\maven\maven-repository\com\fasterxml\jackson\core\jackson-core\2.13.5\jackson-core-2.13.5.jar;D:\maven\maven-repository\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;D:\maven\maven-repository\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;D:\maven\maven-repository\org\apache\poi\poi\3.11\poi-3.11.jar;D:\maven\maven-repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;D:\maven\maven-repository\org\apache\poi\poi-ooxml\3.9\poi-ooxml-3.9.jar;D:\maven\maven-repository\org\apache\poi\poi-ooxml-schemas\3.9\poi-ooxml-schemas-3.9.jar;D:\maven\maven-repository\org\apache\xmlbeans\xmlbeans\2.3.0\xmlbeans-2.3.0.jar;D:\maven\maven-repository\stax\stax-api\1.0.1\stax-api-1.0.1.jar;D:\maven\maven-repository\dom4j\dom4j\1.6.1\dom4j-1.6.1.jar;D:\maven\maven-repository\xml-apis\xml-apis\1.0.b2\xml-apis-1.0.b2.jar;D:\maven\maven-repository\com\alipay\sdk\alipay-sdk-java\4.39.132.ALL\alipay-sdk-java-4.39.132.ALL.jar;D:\maven\maven-repository\org\bouncycastle\bcprov-jdk15on\1.62\bcprov-jdk15on-1.62.jar;D:\maven\maven-repository\com\squareup\okhttp3\okhttp\4.9.3\okhttp-4.9.3.jar;D:\maven\maven-repository\com\squareup\okio\okio\2.8.0\okio-2.8.0.jar;D:\maven\maven-repository\org\jetbrains\kotlin\kotlin-stdlib-common\1.6.21\kotlin-stdlib-common-1.6.21.jar;D:\maven\maven-repository\org\jetbrains\kotlin\kotlin-stdlib\1.6.21\kotlin-stdlib-1.6.21.jar;D:\maven\maven-repository\org\jetbrains\annotations\13.0\annotations-13.0.jar;D:\maven\maven-repository\org\projectlombok\lombok\1.18.30\lombok-1.18.30.jar;D:\maven\maven-repository\org\springframework\boot\spring-boot\3.5.5\spring-boot-3.5.5.jar;D:\maven\maven-repository\org\springframework\boot\spring-boot-autoconfigure\3.5.5\spring-boot-autoconfigure-3.5.5.jar com.example.AlipayApplication Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/core/metrics/ApplicationStartup at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:242) at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:257) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350) at com.example.AlipayApplication.main(AlipayApplication.java:8) Caused by: java.lang.ClassNotFoundException: org.springframework.core.metrics.ApplicationStartup at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ... 5 more运行出现这个错误怎么办
最新发布
11-24
你遇到的这个错误: ``` Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/core/metrics/ApplicationStartup at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:242) ... Caused by: java.lang.ClassNotFoundException: org.springframework.core.metrics.ApplicationStartup ``` ### ❌ 错误原因分析 这个异常的核心原因是 **版本不兼容**,具体来说是: > 你使用了 **Spring Boot 3.x** 的启动类(如 `SpringApplication.run()`),但项目中依赖的 Spring Framework 核心却是较老的版本(比如 `5.0.0.RELEASE`),而 `ApplicationStartup` 是在 **Spring Framework 5.3+** 才引入的类。 从你的 classpath 可以看到: - 使用了 `spring-core-5.0.0.RELEASE.jar`(太旧) - 却又引用了 `spring-boot-3.5.5.jar`(很新) 这导致: ✅ Spring Boot 3.x 要求底层 Spring Framework 至少为 **5.3+**,甚至推荐使用 **6.x(配合 JDK 17+)** ❌ 但你实际加载的是 `spring-core 5.0.0`,它根本没有 `org.springframework.core.metrics.ApplicationStartup` 这个类! --- ### ✅ 解决方案 你需要统一 Spring Boot 和 Spring Framework 的版本,不能混用新旧版本。 #### ✅ 方法一:升级 Spring Core 到匹配版本(推荐) 既然你在用 `spring-boot-3.5.5`,就应该使用对应的完整生态版本。建议修改所有 Spring 相关依赖为 **一致且兼容的版本**。 ##### 修改方式如下(手动管理依赖): 将以下这些旧版本替换为新版: | 原始版本 | 推荐版本 | |--------|--------| | `spring-core-5.0.0.RELEASE` → | `spring-core-6.1.14` | | `spring-context-5.0.0.RELEASE` → | `spring-context-6.1.14` | | `spring-beans-5.0.0.RELEASE` → | `spring-beans-6.1.14` | | ...其他 spring-* 模块同理... | | 或者更简单地,直接使用 **Spring Boot 官方 BOM 来统一管理版本**。 --- ### 🛠️ 推荐做法:使用 Maven 或 Gradle 管理依赖(避免手动冲突) 如果你目前是手动导入 JAR 的方式开发(即没有用构建工具),强烈建议迁移到 **Maven / Gradle**。 下面是基于 **Maven** 的正确配置示例: #### `pom.xml` 示例(Spring Boot 3.2.x + JDK 21 兼容) ```xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>alipay-demo</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <!-- 使用 Spring Boot 官方父POM --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.12</version> <!-- 支持 JDK 21,Spring 6 --> <relativePath/> </parent> <properties> <java.version>21</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- Web 启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Alipay SDK --> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.39.132.ALL</version> </dependency> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project> ``` > 💡 注意: > - `spring-boot-starter-parent:3.2.12` 内置了 Spring Framework 6.1.x > - 不需要再手动指定 `spring-core`, `spring-context` 等版本,全部由 parent 控制 > - 支持 JDK 21 > - 自动解决依赖冲突 --- ### 🔧 如果你坚持不用 Maven(纯手工依赖管理) 那你必须手动确保: 1. 删除所有 `spring-*.jar` 中版本低于 `5.3` 的(尤其是 `5.0.0.RELEASE`) 2. 替换为 Spring 6.1+ 版本(适用于 Spring Boot 3.x) 👉 下载地址(或通过 Maven Repository 手动下载): https://repo1.maven.org/maven2/org/springframework/ 你需要至少含以下 JAR(均为 6.1+ 版本): - `spring-core-6.1.14.jar` - `spring-beans-6.1.14.jar` - `spring-context-6.1.14.jar` - `spring-aop-6.1.14.jar` - `spring-expression-6.1.14.jar` - `spring-jcl-6.1.14.jar` 然后重新构建 classpath。 ⚠️ 手动管理非常容易遗漏,强烈不推荐! --- ### ✅ 验证是否修复 运行程序后不再报错 `NoClassDefFoundError: ApplicationStartup`,并且能看到类似输出: ``` INFO o.s.b.w.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8080 INFO com.example.AlipayApplication - Started AlipayApplication in 2.3 seconds ``` 说明成功启动! --- ### ⚠️ 补充提醒 1. **JDK 版本要求**: - Spring Boot 3.x 要求 **JDK 17 或以上** - 你使用的是 JDK 21 ✅,没问题 2. **Alipay SDK 兼容性**: - 当前使用的 `alipay-sdk-java-4.39.132.ALL` 是最新版,支持 Java 8+ - 与 Spring Boot 3.x 完全兼容 ✅ 3. **IDEA 调试参数说明**: ``` -javaagent:D:\ideaIU\IntelliJ IDEA ...\idea_rt.jar=... ``` 这个是 IDEA 自动加的调试代理,不影响运行。 --- ### 总结 | 问题 | 原因 | 解决方法 | |------|------|-----------| | `NoClassDefFoundError: ApplicationStartup` | Spring Boot 3.x 与 Spring 5.0 不兼容 | 升级 Spring Framework 至 6.1+,推荐使用 Maven 统一管理依赖 | --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值