2024 年 9 月 29 日之后,我开始在 spring-boot 2.5.3 上看到非常奇怪的行为。
我有一个依赖于 spring-boot 2.5.3 的代码库,下面是 spring 相关依赖项的列表:
spring-cloud-starter-contract-stub-runner
spring-boot-starter-test
spring-cloud-starter-sleuth
spring-cloud-starter-contract-stub-runner
spring-boot-starter-web
springdoc-openapi-maven-plugin
spring-cloud-starter-openfeign
spring-boot-starter-validation
springdoc-openapi-webmvc-core
从提到的日期开始,我开始看到我的所有 CI 作业都因编译错误而失败,没有代码更改,得到以下内容
[ERROR]package org.springframework.cloud.openfeign does not exist
[ERROR] <class-full-path> cannot find symbol
symbol: class FeignClient
我对maven进行了各种调试
mvn dependency:tree -Dverbose > dep6.tree
mvn dependency:go-offline > dep.offline
#build the code with a clean m2 repo and with debug logging
mvn clean package -Dmaven.repo.local=./empty-m2 -DskipTests -X
我 100% 确定这是 Maven 依赖项或存储库问题,但我无法找到线索或指针。
TLDR; 一些依赖项取决于名为 ->
https://maven.restlet.org/
的存储库,但该存储库不再有效并指向一个网站 https://restlet.talend.com/
。
我必须将我的settings.xml更新为类似这样的内容,以便我将覆盖所有报告并回退到
https://repo.maven.apache.org/maven2/
:
<settings>
<mirrors>
<mirror>
<id>central-only</id>
<mirrorOf>*</mirrorOf>
<url>https://repo.maven.apache.org/maven2/</url>
</mirror>
</mirrors>
</settings>
复制细节和步骤:
[WARNING] Checksum validation failed, expected <!doctype but is a0023349b1f10ff1457077b4f4f49f7015c00b6a from maven-restlet for https://maven.restlet.org/org/springframework/security/spring-security-bom/<version>/spring-security-bom-<version>.pom
[WARNING] The POM for org.springframework.cloud:spring-cloud-starter-contract-stub-runner:jar:<version> is invalid, transitive dependencies (if any) will not be available: 17 problems were encountered while building the effective model for org.springframework.cloud:spring-cloud-starter-contract-stub-runner:<version>
[FATAL] Non-parseable POM /app/./empty-m2/com/datastax/oss/java-driver-bom/4.9.0/java-driver-bom-4.9.0.pom: unexpected markup <!d (position: START_DOCUMENT seen <!d... @1:3) @ /app/./empty-m2/com/datastax/oss/java-driver-bom/<version>/java-driver-bom-<version>.pom, line 1, column 3
[FATAL] Non-parseable POM /app/./empty-m2/org/codehaus/groovy/groovy-bom/<version></version>>/groovy-bom-<version></version>>.pom: unexpected markup <!d (position: START_DOCUMENT seen <!d... @1:3) @ /app/./empty-m2/org/codehaus/groovy/groovy-bom/<version></version>>/groovy-bom-<version></version>>.pom, line 1, column 3
[FATAL] Non-parseable POM /app/./empty-m2/org/infinispan/infinispan-bom/<version></version>>.Final/infinispan-bom-<version></version>>.Final.pom: unexpected markup <!d (position: START_DOCUMENT seen <!d... @1:3) @ /app/./empty-m2/org/infinispan/infinispan-bom/<version></version>>.Final/infinispan-bom-<version></version>>.Final.pom, line 1, column 3
此时,代码无法编译是非常合理的,因为有很多依赖项 maven 无法解析,因此编译错误。
从上面的日志中可以看到,多个pom文件没有解析为有效的pom结构文件,但它解析为正常的html页面。
在settings.xml中应用maven镜像映射后,一切都恢复正常,我希望这可以为其他人节省时间。