如何使用mvn运行许多appengine模块

时间:2018-02-22 19:34:19

标签: maven google-app-engine

我有一个模块“Module1”,我可以使用下面的命令执行(在项目文件夹中):

  • $ mvn appengine:run

现在我有另一个模块“Module2”,我也可以使用相同的上一个命令执行。

我需要在同时运行这两个模块。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

根据您对目标appengine:run的使用情况,我了解您正在使用本地开发服务器测试您的应用程序。通过查看the documentation for appengine:run,您可以使用标记 port 在不同的端口中启动两个独立的Development Server实例。

您可以使用如下命令定义该标志:

mvn appengine:run -Dapp.devserver.port=<PORT_NUMBER>

开发服务器中的默认端口号为8080,因此您可以为 Module1 使用端口 8080 ,然后使用其他端口,例如您的 Module2 8082 。这样,您可以移动到两个服务所在的目录,并使用不同的端口号运行这两个命令,然后您就可以分别在localhost:8080localhost:8082中访问它们。

更新(可能是更好的解决方案)

实际上,如in the documentation所述:

  

如果项目的根目录仅包含您的服务,那么您   可以使用单个Maven命令部署所有这些服务。

这适用于生产环境(App Engine)和开发服务器中的部署。因此,如果您正确配置应用程序,则可以使用单个mvn appengine:run命令在同一个开发服务器实例中启动这两个服务(它们仍将在不同的端口中启动)。

因此,为了配置Java GAE应用程序及其所有服务,您可以遵循相同的想法(与此主题无关​​)migration guide。为此,当您在默认服务的pom.xml文件中配置 com.google.cloud.tools»appengine-maven-plugin 时,从默认服务开始添加<services>标记,包括应用程序中的所有服务:

<plugin>
  <groupId>com.google.cloud.tools</groupId>
  <artifactId>appengine-maven-plugin</artifactId>
  <version>1.3.1</version>
  <configuration>
    <deploy.project>PROJECT_NAME</deploy.project>
    <deploy.version>PROJECT_VERSION</deploy.version>
    <services>
        <!-- Default service -->
        <service>    
          ${project.build.directory}/${project.name}-${project.version}
        </service>
        <!-- One for each additional service -->
        <service>
          ${project.parent.basedir}/SERVICE_NAME/target/SERVICE_ARTIFACT-${project.version}
        </service>
    </services>
  </configuration>
</plugin>

一旦完成,您的应用程序将检测与其关联的所有服务,并且您将能够使用单个Maven命令同时处理所有这些服务,即mvn appengine:deploy将部署所有服务并mvn appengine:run 1}}将启动一个包含所有服务的开发服务器。对于Development Server的情况,您可以访问localhost:PORT/_ah/admin中的Server Admin,然后转到 Modules 选项卡以查找每个正在运行的服务的URL:

enter image description here

我希望这两种选择中的一种(尽管我会选择第二种)对你的用例很有用。