2

在过去的几年里,我一直在开发一个 Web 应用程序(使用 Java 8、CSS、JS、HTML 编写)并在 Google App Engine标准环境中定期对其进行测试,没有任何问题。我的应用程序的结构如下:

  1. myCommonEntities(完全用 Java 编写,编译时生成标准 .jar 文件)
  2. myCommonTransactions(完全用 Java 编写,编译时生成标准 .jar 文件)
  3. myCommonUtilities(完全用 Java 编写,编译时生成标准 .jar 文件)
  4. myAppServer(完全用 Java 编写,编译时生成标准 .jar 文件)
  5. 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。

这是否意味着我的应用程序,在新的部署方案下,只有当我将上述项目结构转换为“耳朵”结构时才会被部署?或者,有没有办法让我部署我的应用程序而不必从现有结构更改为“耳朵”结构?

对此问题的任何帮助将不胜感激。如果我完全误解了从旧方式迁移到新方式的方法,我愿意接受抨击。

4

1 回答 1

0

.....它再次发生......部署过程成功完成(根据控制台中的消息),但第一次调用服务器端java类导致ClassNotFoundExeption...... ..这是(现在仍然是)断断续续的。

事实证明,当您单击 Google Cloud Tools 按钮 -> 部署到 App Engine Standard 时,所有代码都被转储,<YOUR_PROJECT_NAME>\.metadata\.plugins\com.google.cloud.tools.eclipse.appengine.deploy\tmp\1602065809544\staging并且部署过程从该文件夹进行部署。

时间戳(即上述文件夹名称的一部分)是启动部署的时间。通过检查上面的内容,我意识到 jar 文件的大小.....commonEntities 和 commonAppServer 分别是 10 KB,而不是 100 KB 和 100 MB WEB-INF\lib folderstaging这意味着部署过程没有以适当的方式获取用于部署的文件。

我没有能力定义正确的,因为我不是部署过程的作者,但无论是谁,都应该调查一下。

我的解决方案:删除tmp文件夹的所有内容,重建所有项目并重新部署。这有点累,但是,嘿,它的工作原理!

于 2020-10-07T10:31:18.113 回答