问题描述
过去几年来,我一直在开发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)
这是pom.xml文件中用于部署到GAE的部分:
<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
根据this web page进行搜索之后,我意识到不建议使用appcfg部署方法,现在已将其gloud app deploy
方法所取代。下载该应用程序后,我使用以下命令部署了我的应用程序:gcloud app deploy
。
问题是,部署的gloud app deploy
方法仅上载src/main/webapp
文件夹中的源代码,即所有css,html和js都被上载。但是,包含实体,事务,实用程序和服务器代码的4个jar文件不会上载,因此在访问网页时会导致ClassNotFoundException
。
因此,我再次搜索是否缺少某项内容,但发现了this page。其中,我逐字引用此页面上的内容...它说....
一个例子 这是一个示例,说明如何为具有两项服务的应用程序在WAR目录结构中配置各种文件:处理Web请求的默认服务,以及用于后端处理的另一项服务(名为my-service)。 假设顶级EAR目录是“ my-application”,请定义文件my-application / meta-inf / appengine-application.xml:
就我的应用程序而言,以上引用中示例为“ my-service”的内容等效于myServerApp,而以上引用中示例为“默认服务”的内容等效于myWebApp。
这是否意味着如果我将上述项目结构转换为“ ear”结构,则在新的部署方案下,仅会部署我的应用程序? 另外,是否有一种方法可以部署我的应用程序而不必从现有结构更改为“ ear”结构?
在此问题上的任何帮助将不胜感激。如果我完全误解了从旧方法迁移到新方法的方法,我愿意冒犯。
解决方法
...然后又发生了一次.....部署过程成功完成(根据控制台中的消息),但是第一次调用服务器端Java类导致ClassNotFoundExeption...。 .....这是(现在仍然)断断续续的。
事实证明,当您单击Google Cloud Tools按钮->部署到App Engine标准时,所有代码都转储到<YOUR_PROJECT_NAME>\.metadata\.plugins\com.google.cloud.tools.eclipse.appengine.deploy\tmp\1602065809544\staging
中,并且部署过程从该文件夹中部署。
时间戳(属于上面的文件夹名称的一部分)是启动部署的时间。通过检查上面WEB-INF\lib folder
中staging
的内容,我意识到jar文件..... commonEntities和commonAppServer的大小分别为10s KB,而不是100s KB和100s MB。这意味着部署过程并未以正确的方式采购要部署的文件。
我没有资格定义适当,因为我不是部署过程的作者,但无论是谁,都应对此进行研究。
我的解决方案:删除tmp
文件夹的所有内容,重建所有项目并重新部署。有点累,但是嘿,可以用!!!