【问题标题】:When deploying to google app engine using "gcloud app deploy" command, only the source code in src/main/webapp gets deployed使用“gcloud app deploy”命令部署到谷歌应用引擎时,仅部署 src/main/webapp 中的源代码
【发布时间】:2020-12-31 18:42:58
【问题描述】:

在过去的几年里,我一直在开发一个网络应用程序(使用 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

搜索后,根据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”结构时,我的应用才会被部署? 或者,有没有办法让我部署我的应用程序而不必从现有结构更改为“耳朵”结构?

我们将非常感谢您对此事的任何帮助。如果我完全误解了从旧方式迁移到新方式的方法,我愿意接受抨击。

【问题讨论】:

  • 嗨@user3483599,你能试试运行命令mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID而不是gloud app deploy吗?根据official documentation,此命令应该允许您使用 Maven 部署应用程序。
  • 感谢您的回复,@ gso_gabriel。我一定会在这里尝试并更新。
  • 嗨 @user3483599 该命令对您有帮助吗?
  • 我从头开始重新安装了所有东西,包括 Eclipse 2020-06、Google Cloud Tools for Eclipse,创建了新的 Eclipse 项目,从备份中导入源代码到这些新创建的项目中,重新构建了所有项目,然后使用 Eclipse 中 Google Cloud Tools for Eclipse 按钮​​中的“部署到 App Engine 标准...”选项进行部署,并且可以正常工作。

标签: google-app-engine deployment gcloud deprecated appcfg


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多