Google Cloud部署Java应用报错“No deployable artifacts were found”如何解决?
排查与解决步骤
- 确认
gcloud app deploy的执行目录是否正确
你需要在app.yaml所在的项目根目录执行部署命令,且确保该目录下可正常执行mvn package生成jar包。如果你的app.yaml放在非项目根目录,执行命令时需要指定文件路径:gcloud app deploy <path-to-your-app.yaml> - 检查jar包属性、命名与路径是否符合识别规则
GCP App Engine flex环境默认会在target目录下查找名称匹配*.jar的可执行jar包,如果你的pom.xml配置了自定义finalName,或者生成的是未打包依赖的普通jar包,都会导致识别失败。
你可以在pom.xml的build节点显式配置打包规则,示例如下(Spring Boot应用):
配置完成后可本地执行<build> <finalName>your-app-name</finalName> <plugins> <!-- 确保配置了repackage逻辑生成包含所有依赖的可执行jar --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>java -jar target/your-jar-name.jar验证jar包是否可正常启动。 - 检查app.yaml配置是否显式指定部署包路径
你可以在app.yaml中手动指定要部署的包路径,跳过自动识别逻辑避免匹配失败:runtime: java env: flex runtime_config: jdk: openjdk11 # 替换为你实际使用的JDK版本,支持8、11、17等正式兼容版本 artifact: target/your-app-name.jar # 填写mvn package生成的jar/war包相对路径,war包直接替换后缀为.war即可 - 排除版本兼容问题
之前配置env: standard时报Java 6不支持,是因为App Engine标准环境已停止对Java 6的支持,且标准环境对打包格式、依赖项有额外的约束要求,如果你不需要使用标准环境的专属特性,继续使用flex环境即可。部署前可执行gcloud config set app/use_runtime_builders true确保使用官方最新的构建工具链。 - 查看详细调试日志定位问题
上述配置调整后如果仍然报错,可在部署命令中加上--verbosity=debug参数输出完整构建日志,确认构建过程中扫描的目录路径、查找artifact的逻辑是否和你的预期一致:gcloud app deploy --verbosity=debug
内容的提问来源于stack exchange,提问作者theChoosyBeggar
相关产品推荐
相关产品推荐

