PAYATHON 2026

Maven 为何无法解析插件依赖中的 SNAPSHOT?

数据小许

结论

通常无需在依赖版本中手动填写时间戳。声明 2025.6-SNAPSHOT 后,Maven 会读取该版本目录下的 maven-metadata.xml,并据此解析实际发布的时间戳版本。

从问题中提供的地址来看,建议先检查插件仓库 URL:配置和 Maven 日志中使用的是 /repositories/maven-snapshots,而可访问元数据和带时间戳 POM 的地址使用的是 /repository/maven-snapshots。两者路径不同。可以先将仓库 URL 改为实际存放文件的地址。

修正仓库地址

将 pluginRepository 中的 URL 改为与实际文件地址一致:

<pluginRepositories>
  <pluginRepository>
    <id>plugin-snapshots</id>
    <url>https://central.sonatype.com/repository/maven-snapshots</url>
    <releases>
      <enabled>false</enabled>
    </releases>
    <snapshots>
      <enabled>true</enabled>
      <updatePolicy>always</updatePolicy>
    </snapshots>
  </pluginRepository>
</pluginRepositories>

依赖中继续使用基础快照版本:

<dependency>
  <groupId>io.openapiprocessor</groupId>
  <artifactId>openapi-processor-spring</artifactId>
  <version>2025.6-SNAPSHOT</version>
</dependency>

常规依赖声明中无需填写 2025.6-20251206.152917-15 这样的时间戳版本。Maven 通常会根据仓库元数据自动映射时间戳和构建编号。

验证方式

检查配置的仓库基础地址下是否能访问以下文件:

  • io/openapiprocessor/openapi-processor-spring/2025.6-SNAPSHOT/maven-metadata.xml
  • 元数据中列出的带时间戳 POM 和 JAR

如果本地缓存了旧的解析结果,可以使用 mvn -U 重新检查快照更新。例如:

mvn -U <原来的 Maven 命令>

日志应显示 Maven 从修正后的 /repository/maven-snapshots/ 路径读取元数据和构件。如果该路径下的元数据或其中列出的构件不存在、无法访问,或者元数据中没有对应的时间戳版本,就需要继续检查仓库发布结果和访问权限。Gradle 能成功使用该依赖,并不能确认 Maven 当前配置的仓库地址也正确。

备注:内容仅供参考。