Azure DevOps中Maven构建无法找到azure-storage-blob依赖包问题求助
问题1:如何让Maven输出依赖下载的完整URL地址
你可以给Maven开启Debug日志模式,只需要修改Azure DevOps流水线中Maven任务的mavenOptions参数,添加-X标识即可,修改后的配置示例如下:
- task: Maven@3 inputs: mavenPomFile: 'pom.xml' mavenOptions: '-Xmx3072m -X' javaHomeOption: 'JDKVersion' jdkVersionOption: '1.8' jdkArchitectureOption: 'x64' publishJUnitResults: true testResultsFiles: '**/surefire-reports/TEST-*.xml' goals: 'package'
开启后日志会输出每个依赖尝试下载的源地址、完整URL、请求状态等全部细节。
问题2:为什么同属com.azure组的其他依赖存放在默认central仓库,仅azure-storage-blob存放在repo1仓库
实际上repo1.maven.org和repo.maven.apache.org都属于Maven官方中央仓库的节点,二者共享全量包资源,不存在包仅存放在单个节点的情况。你遇到的差异是节点同步延迟导致的:新版本包发布后,不同节点的同步完成时间会有几小时的时差,你查询时默认节点还没同步到对应版本的资源,就会出现找不到包的情况。
另外注意你日志里报错实际在找12.4.0版本的包,而pom里声明的是12.14.0,需要排查是否存在父pom、依赖传递覆盖了版本号的情况。
问题3:该依赖拉取失败的问题如何解决
你之前配置仓库触发拦截是因为Maven 3.8.1及以上版本默认拦截所有HTTP协议的仓库地址,你填写的http://repo1.maven.org/maven2使用了HTTP协议才会被拦截,按以下步骤修正即可:
- 首先修改pom中的仓库配置,把HTTP改为HTTPS:
<repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central1</id> <name>Maven Repository Switchboard</name> <url>https://repo1.maven.org/maven2</url> </repository> </repositories>
- 如果你担心同步延迟问题,也可以直接替换默认中央仓库地址,在pom的
repositories配置中把id设为central覆盖默认配置即可:
<repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Maven Central</name> <url>https://repo1.maven.org/maven2</url> </repository> </repositories>
- 建议在pom中添加
dependencyManagement配置锁定azure-storage-blob的版本,避免依赖传递导致版本被篡改:
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-blob</artifactId> <version>12.14.0</version> </dependency> </dependencies> </dependencyManagement>
Azure DevOps的Ubuntu托管代理每次运行都是全新的干净环境,默认没有缓存,不需要额外做缓存清理操作,修改后重新运行流水线即可正常拉取依赖。
内容的提问来源于stack exchange,提问作者Nick.Mc
相关产品推荐
相关产品推荐

