部署到Google AppEngine的jar文件有哪些?如何确认实际运行的jar版本
排查Google AppEngine部署依赖与运行版本方案
一、确认实际部署到GAE的文件清单
- 先检查本地构建产物是否完整:运行
mvn package后,打开target目录下的最终war包/exploded war文件夹,确认WEB-INF/lib目录下的jar包是否齐全,只要构建产物里的文件齐全,后续部署才会正常上传。你当前只上传了changelog.html大概率是构建阶段没有正确生成完整的部署包,mvn clean之后没执行打包命令直接部署导致的。 - 查GAE部署版本的文件列表:登录Google Cloud控制台,进入App Engine的「版本」页面,找到你刚部署的版本,点击右侧的「调试」按钮,可直接查看该版本部署的所有文件,包括
WEB-INF/lib下的所有jar包名称和版本。 - 用gcloud命令行查部署内容:运行
gcloud app versions describe [你的版本号] --service=[你的服务名],可查看部署的构建哈希和关联的存储对象,也可以直接到部署对应的Cloud Storage桶里找对应版本的部署包,解压后查看里面的jar文件。
二、确认运行时实际加载的jar版本
- 代码里加日志打印类加载路径:在应用启动逻辑或者测试接口里加入对应代码,打印指定类的加载来源,比如你要查google-api-client的版本,就打印
com.google.api.client.googleapis.extensions.appengine.auth.oauth2.AppIdentityCredential.class.getProtectionDomain().getCodeSource().getLocation(),输出的路径就包含实际加载的jar包版本号。 - 用GAE内置的调试工具:在控制台的版本调试页面,直接启用远程调试,查看类加载器的加载顺序和已加载的jar包信息。
- 排查Maven依赖冲突根本原因:运行
mvn dependency:tree -Dverbose,可以输出所有依赖的传递引入路径,找到重复引入google-api-client-appengine的父依赖,在对应依赖里加<exclusions>标签排除不需要的版本,再用mvn dependency:analyze-duplicate检查是否还有重复依赖,从根源避免打包多版本jar的问题。
三、解决部署只上传单个文件的问题
- 部署前必须先执行完整构建:正确的部署命令应该是
mvn clean package appengine:deploy,不要单独运行mvn clean之后直接部署,会导致读取到旧的不完整的部署缓存。 - 清理gcloud部署缓存:删除本地gcloud日志目录下的部署缓存,重新执行完整打包部署命令即可上传全部文件。
内容的提问来源于stack exchange,提问作者Tim Cobra
相关产品推荐
相关产品推荐

