2024 年 9 月 29 日之后,Spring Boot 应用程序的 Maven 构建失败并出现编译错误

问题描述 投票:0回答:1

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
spring-boot maven
1个回答
0
投票

我 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>

复制细节和步骤:

  • 将 2 个月前成功构建的 github 操作日志中的 CI 日志与我在问题期间收到的日志进行了比较。
  • 经过很长时间的比较和调试,我发现以下日志行出现在最新版本(有缺陷的版本)中,而不是旧的(好的)版本中。
[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镜像映射后,一切都恢复正常,我希望这可以为其他人节省时间。

© www.soinside.com 2019 - 2024. All rights reserved.