执行bazel run @maven//:pin报FileNotFoundException,需生成maven_install.json
问题解决:Bazel rules_jvm_external pin命令找不到maven_install.json
错误原因
你在MODULE.bazel中指定了lock_file = "//backend:maven_install.json",但该文件尚未生成。Bzlmod模式下,rules_jvm_external的maven模块扩展在加载时会尝试读取这个锁文件,因此触发了文件不存在的错误。
解决方案
不需要预先创建maven_install.json文件,只需调整配置和命令步骤即可自动生成:
临时注释lock_file配置
修改你的MODULE.bazel,暂时注释掉lock_file行,让Bazel能正常加载扩展:maven.install( artifacts = [ "io.grpc:grpc-netty:1.38.0", "org.springframework.boot:spring-boot-starter:2.5.2", "org.springframework.boot:spring-boot-starter-web:2.5.2", ], fetch_sources = True, # lock_file = "//backend:maven_install.json", )执行pin命令并指定输出路径
运行pin命令时通过--output参数指定生成的锁文件位置为backend目录:bazel run @maven//:pin -- --output=backend/maven_install.json恢复lock_file配置
重新打开MODULE.bazel的lock_file注释:maven.install( artifacts = [ "io.grpc:grpc-netty:1.38.0", "org.springframework.boot:spring-boot-starter:2.5.2", "org.springframework.boot:spring-boot-starter-web:2.5.2", ], fetch_sources = True, lock_file = "//backend:maven_install.json", )同步依赖
执行同步命令让Bazel识别新的锁文件:bazel sync
关键说明
Bzlmod模式下的rules_jvm_external与传统WORKSPACE模式的行为不同:加载模块扩展时会校验lock_file的存在性,因此不能先配置不存在的锁文件路径,必须先生成文件再关联配置。pin命令的--output参数可以灵活指定锁文件的生成位置,匹配你想要放在backend目录的需求。
内容的提问来源于stack exchange,提问作者Prasanth Kommini
相关产品推荐
相关产品推荐

