【问题标题】:Appengine multiple modules local dev - JavaAppengine 多个模块本地开发 - Java
【发布时间】:2023-03-13 03:10:01
【问题描述】:

我有 3 个使用 Google Appengine Standard 的 java 模块:

第一个模块使用 Java 7 和 Servlet 2.5 + web.xml + Spring 4

第二个模块使用 Java 8 和 Servlet 3.1,没有 web.xml + Spring 5 使用 WebApplicationInitializer。

第三个模块只是前端文件(HTML,CSS)。

我有一个 dispatch.yaml,其中包含每个模块的路由。


如果我只使用 java8 模块运行:

mvn appengine:run OR /usr/lib/google-cloud-sdk/bin/java_dev_appserver.sh, 

没关系,模块运行。

如果我使用:dev_appserver.py theJava8Module,会出现以下问题:

google.appengine.tools.devappserver2.errors.AppConfigNotFoundError: The "target/theJava8Module/WEB-INF" subdirectory exists but is missing web.xml

在我有这个 java8 模块之前,我曾经使用这个命令运行:

dev_appserver.py --max_module_instances=1 frontendmodule/frontendmodule.yaml dispatch/dispatch.yaml java7Module/target/java7Module --dev_appserver_log_level=debug

当我使用这个命令时,没关系,两个模块运行,我可以使用应用程序和调度规则。


我的问题是,有没有办法运行多个模块并使用调度规则? 我可以使用 dev_appserver.py (python) 来运行没有 web.xml 的 java8 应用程序吗? 或者我可以使用 mvn:appengine 运行多个模块并使用 dispatch.xml 或 dispatch.yaml 吗?

重要提示:我可以使用 mvn:appengine 和 dev_appserver 运行单独的模块吗,问题是端口会不同,所以调度规则不起作用。

例子:

dev_appserver.py --max_module_instances=1 frontendmodule/frontendmodule.yaml dispatch/dispatch.yaml java7Module/target/java7Module --dev_appserver_log_level=debug (port 8080)
mvn appengine:run java8module (port 9090)

【问题讨论】:

    标签: java spring google-app-engine dev-appserver


    【解决方案1】:

    User Guide for the appengine-maven-plugin 涵盖了运行多个模块。看看有没有帮助。

    【讨论】:

    • 嗨,但是,我如何部署 dispatch.yaml?我的前端模块向其他模块发送请求,调度具有转发正确模块的规则。使用 mvn appengine:run 我也可以部署调度吗?前端模块是一个app.yaml:#application:gae-microservices服务:默认运行时:python27 api_version:1 threadsafe:true
    • appengine:run 只是在本地运行应用程序。如果要部署调度文件,请使用 appengine:deployDispatch。见:cloud.google.com/appengine/docs/standard/java/tools/…
    • 我想在本地“部署”,例如:dev_appserver.py --max_module_instances=1 frontendmodule/frontendmodule.yaml dispatch/dispatch.yaml java7Module/target/java7Module --dev_appserver_log_level=debug。在这种情况下,我可以运行所有模块和调度规则。
    • FWIW,至少在 python 中本地开发服务器不能运行基于主机名的 dispatch.yaml 规则。如果是这种情况,则会出现警告消息。但可能有办法解决它。
    【解决方案2】:

    关于你的Java7模块,你应该知道Google Cloud的Java7运行环境deprecation

    我可以使用dev_appserver.py (python) 来运行没有 web.xml 的 java8 应用程序吗?

    Java 的本地开发服务器记录在 here

    App Engine SDK for Java 包括一个本地开发服务器,用于 在您的计算机上测试您的应用程序。当地发展 服务器模拟 App Engine Java 运行时环境和所有 其服务,包括 Datastore。

    appengine-web.xmlreference 的语法描述是这样的:

    ..... App Engine Java 应用程序必须有一个名为 appengine-web.xml 的文件 在其 WAR 中,在目录 WEB-INF/ 中。这是一个 XML 文件,其 根元素是<appengine-web-app>。 ....

    我可以使用 mvn:appengine 运行多个模块并使用 dispatch.xml 或 dispatch.yaml 吗?

    据此doc

    运行本地开发时忽略所有调度文件 服务器。定位实例的唯一方法是通过它们的端口。

    【讨论】:

    • ..... App Engine Java 应用程序的 WAR 中必须有一个名为 appengine-web.xml 的文件,该文件位于 WEB-INF/ 目录中。这是一个根元素为 的 XML 文件。 ....但问题是因为我使用没有 web.xml 的 servlet 3.1,我可以使用带有 servlets 2.5 的调度文件运行多个模块,因为我可以使用 dev_appserver.py,这就是想要运行 dev_appserver.py 的原因小服务程序 3.1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 2014-10-02
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多