在过去的几年里,我一直在开发一个 Web 应用程序(使用 Java 8、CSS、JS、HTML 编写)并在 Google App Engine标准环境中定期对其进行测试,没有任何问题。我的应用程序的结构如下:
- myCommonEntities(完全用 Java 编写,编译时生成标准 .jar 文件)
- myCommonTransactions(完全用 Java 编写,编译时生成标准 .jar 文件)
- myCommonUtilities(完全用 Java 编写,编译时生成标准 .jar 文件)
- myAppServer(完全用 Java 编写,编译时生成标准 .jar 文件)
- myAppWeb(使用js、css、html编写,生成标准的.war文件,包含以上4个jar)
这是部署到 GAE 时调用的 pom.xml 文件的一部分:
<build>
<plugins>
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.9.64</version>
<configuration>
<enableJarClasses>false</enableJarClasses>
<version>1</version>
<devAppserverLogLevel>warning</devAppserverLogLevel>
</configuration>
</plugin>
</plugins>
</build>
我曾经使用 myWebApp 目录中的以下命令部署应用程序:
mvn appengine:update
在过去的 4 天里,我一直无法使用上述方法部署我的应用程序。该mvn appengine:update
命令返回以下错误:
Application deployment failed. Message: Deployments using appcfg are no longer supported
在搜索之后,根据这个网页,我意识到 appcfg 部署方法已被弃用,现在被该gloud app deploy
方法取代。下载相同内容后,我使用以下命令部署了我的应用程序:gcloud app deploy
.
问题是,gloud app deploy
部署方式只上传src/main/webapp
文件夹中的源代码,即所有css、html和js都被上传。但是,包含实体、事务、实用程序和服务器代码的 4 个 jar 文件不会被上传,这会导致ClassNotFoundException
访问网页时出现错误。
因此,如果我遗漏了什么,我再次搜索并找到了此页面。其中,我从这个页面逐字引用......它说......
示例 下面是一个示例,说明如何为具有两个服务的应用程序配置 WAR 目录结构中的各种文件:处理 Web 请求的默认服务,以及用于后端处理的另一个服务(名为 my-service)。 假设顶级 EAR 目录是“my-application”,定义文件 my-application/META-INF/appengine-application.xml:
就我的应用程序而言,上面引用中示例为“my-service”的内容等同于 myServerApp,上面引用中示例为“默认服务”的内容等同于 myWebApp。
这是否意味着我的应用程序,在新的部署方案下,只有当我将上述项目结构转换为“耳朵”结构时才会被部署?或者,有没有办法让我部署我的应用程序而不必从现有结构更改为“耳朵”结构?
对此问题的任何帮助将不胜感激。如果我完全误解了从旧方式迁移到新方式的方法,我愿意接受抨击。