构建Google Dataflow模板时Maven卡在下载maven-default-http-blocker如何解决
问题根因
你遇到的maven-default-http-blocker不是本地缓存,是Maven 3.8.1及以上版本默认内置的安全规则,会自动将所有使用HTTP协议的远程仓库镜像指向0.0.0.0,阻止从不加密的HTTP源下载依赖,避免供应链攻击。你使用的Google Dataflow模板的pom文件中配置了多个HTTP协议的第三方仓库,刚好触发了该规则。
解决方法
你可以根据需求选择以下任意一种方案:
方案1:临时绕过(最快适配现有项目)
找到本地Maven的全局配置文件settings.xml,默认路径为~/.m2/settings.xml(Mac/Linux系统)或C:\Users\你的用户名\.m2\settings.xml(Windows系统),找到如下配置段,将其注释或删除后保存即可:<mirror> <id>maven-default-http-blocker</id> <mirrorOf>external:http:*</mirrorOf> <url>http://0.0.0.0/</url> <blocked>true</blocked> </mirror>配置修改完成后重新执行构建命令即可。
方案2:更安全的项目级修改(推荐,无需改动全局Maven配置)
直接修改你拉取的Dataflow模板项目的pom.xml文件,把所有HTTP协议的仓库地址替换为对应的HTTPS协议版本,你日志中出现的所有HTTP仓库均支持HTTPS访问:- 把
http://packages.confluent.io/maven/替换为https://packages.confluent.io/maven/ - 把
http://repository.ow2.org/nexus/content/repositories/snapshots替换为https://repository.ow2.org/nexus/content/repositories/snapshots - 把
http://repository.jboss.org/nexus/content/groups/public/替换为https://repository.jboss.org/nexus/content/groups/public/ - 剩余的java.net、sonatype等所有HTTP开头的仓库地址,统一替换为HTTPS开头的对应地址即可
修改完成后重新执行构建命令即可,该方案符合Maven的安全要求,不会影响其他项目的构建规则。
- 把
方案3:缓存报错处理
如果修改完成后仍然出现依赖找不到的缓存类报错,可在构建命令中添加-U参数强制更新快照依赖,修改后的命令如下:mvn -U compile exec:java \ -Dexec.mainClass=com.google.cloud.teleport.templates.<template-class> \ -Dexec.cleanupDaemonThreads=false \ -Dexec.args=" \ --project=<project-id> \ --stagingLocation=gs://<bucket-name>/staging \ --tempLocation=gs://<bucket-name>/temp \ --templateLocation=gs://<bucket-name>/templates/<template-name>.json \ --runner=DataflowRunner"
内容的提问来源于stack exchange,提问作者bli00
相关产品推荐
相关产品推荐

