Google app engine 在部署到google app engine时使用;gcloud应用程序部署“;命令,则仅部署src/main/webapp中的源代码

Google app engine 在部署到google app engine时使用;gcloud应用程序部署“;命令,则仅部署src/main/webapp中的源代码,google-app-engine,deployment,gcloud,deprecated,appcfg,Google App Engine,Deployment,Gcloud,Deprecated,Appcfg,在过去的几年里,我一直在开发一个web应用程序(使用Java8、CSS、JS、HTML编写),并定期在GoogleAppEngine标准环境下测试它,没有任何问题。 我的应用程序的结构如下: myCommonEntities(完全用Java编写,编译时生成标准的.jar文件) myCommonTransactions(完全用Java编写,编译时生成标准的.jar文件) myCommonUtilities(完全用Java编写,编译时生成标准的.jar文件) myAppServer(完全用Java编

在过去的几年里,我一直在开发一个web应用程序(使用Java8、CSS、JS、HTML编写),并定期在GoogleAppEngine标准环境下测试它,没有任何问题。 我的应用程序的结构如下:

  • 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>
    
    
    com.google.appengine
    ,我意识到部署的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/META-INF/appengine-application.xml:

    就我的应用而言,上面引用的“我的服务”等同于myServerApp,而上面引用的“默认服务”等同于myWebApp

    这是否意味着,在新的部署方案下,我的应用程序只有在我将上述项目结构转换为“ear”结构时才能部署? 或者,有没有一种方法可以让我在不必从现有结构更改为“ear”结构的情况下部署我的应用程序


    在这件事上的任何帮助都将不胜感激。如果我完全误解了从旧方式迁移到新方式的方法,我愿意接受批评。

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

    结果是,当您单击Google Cloud Tools按钮->Deploy to App Engine Standard时,所有代码都转储到
    \.metadata\.plugins\com.Google.Cloud.Tools.eclipse.appengine.Deploy\tmp\1602065809544\staging
    中,部署过程从此文件夹中部署

    时间戳(这是上面文件夹名称的一部分)是启动部署的时间。在检查上面
    WEB-INF\lib文件夹
    staging
    的内容后,我意识到jar文件的大小…..CommonEntity和commonAppServer分别是10s的KBs,而不是100s的KBs和100s的MBs。这意味着部署过程不是sourcing以适当的方式部署文件

    我没有能力定义适当的
    ,因为我不是部署过程的作者,但无论是谁,都应该对此进行调查


    我的解决方案是:删除
    tmp
    文件夹的所有内容,重建所有项目并重新部署。这有点令人厌倦,但是,它可以工作!!!

    Hi@user3483599请您尝试运行命令
    mvn-package-appengine:deploy-Dapp.deploy.projectId=PROJECT\u ID
    ,而不是
    gloud-app-deploy
    这个命令应该可以让你用Maven部署应用程序。谢谢你的回复,@gso_gabriel。我一定会在这里尝试一下并更新。嗨@user3483599这个命令对你有帮助吗?我从头开始重新安装了所有东西,包括Eclipse 2020-06、用于Eclipse的Google云工具、创建了新的Eclipse项目、导入的源代码从备份到这些新创建的项目中,重新构建所有项目,然后使用Eclipse中Google Cloud Tools for Eclipse按钮中的“Deploy to App Engine Standard…”选项进行部署,结果成功了。