“官方下载的示例”不等于单独打开一个目录就能构建。2019年运行Spring Security OAuth的sparklr2示例时,我遇到 2.3.5.BUILD-SNAPSHOT 依赖解析失败;真正需要分清的,是父POM、依赖JAR和本地失败缓存。

日志其实包含不止一个问题

关键消息可以缩成:

The requested profile "spring" could not be activated because it does not exist.
Could not resolve dependencies for ...:sparklr2:war:2.3.5.BUILD-SNAPSHOT
Failed to read artifact descriptor for ...:spring-security-oauth2:jar:2.3.5.BUILD-SNAPSHOT
Failure to find ...:spring-security-oauth-parent:pom:2.3.5.BUILD-SNAPSHOT
... was cached in the local repository ...

profile不存在是独立线索;依赖描述解析需要POM,POM又可能依赖父POM。只盯着“找不到JAR”,会漏掉后面的父项目问题。

我当时猜测SNAPSHOT尚未发布,但没有保存远程仓库状态,不能把猜测当成最终根因。仓库是否配置、是否允许快照、网络/认证是否正常,以及目标版本是否实际存在,都可能影响解析。

当时用同一源码树补出了构件

下载目录中也有 spring-security-oauth2 模块。我把它打成JAR,再用install-file放入本地仓库,之前找不到JAR的报错不再出现。

这只是当年记录的阶段性结果,不证明示例所有功能、传递依赖和授权流程均已通过。只有JAR而没有正确POM时,后续依赖图仍可能不完整。

优先恢复源码版本和构建上下文

维护此类历史源码时,先固定提交或tag,查看根POM、modules和说明,确认需要一起构建的依赖模块。Maven reactor负责收集模块并按关系安排构建顺序;-pl 选择项目,-am 可同时纳入该reactor内所需项目,但不能凭空找到根POM没有纳入的模块。Maven多模块构建

如果确需安装可信的外部构件,宜携带原始POM。以下仅为路径示例,会写入本地Maven仓库;父POM和它引用的其他构件仍须可解析:

mvn org.apache.maven.plugins:maven-install-plugin:3.2.0:install-file   -Dfile=/path/to/artifact.jar   -DpomFile=/path/to/pom.xml

不要手工把孤立JAR塞进猜测的仓库目录,也不要把生成的最简POM当成完整依赖描述。Maven安装自定义POM示例

强制更新不能修复不存在的版本

Maven会缓存部分解析失败。确认仓库与坐标已修正后,可按需使用 -U 触发更新检查;它不会创建远程不存在的版本,也不能代替认证或网络修复。具体更新策略见Jenkins/Maven Snapshot排查。

该案例涉及已结束维护的旧Spring Security OAuth项目,不能直接作为新授权系统选型或当前安全配置教程。Spring旧项目说明