【发布时间】:2018-02-22 19:34:19
【问题描述】:
我有一个模块“Module1”,我可以使用以下命令执行(在项目文件夹中):
- $ mvn appengine: 运行
现在我有了另一个模块“Module2”,我也可以使用之前的命令执行它。
我需要同时运行两个模块。我该怎么做?
【问题讨论】:
我有一个模块“Module1”,我可以使用以下命令执行(在项目文件夹中):
现在我有了另一个模块“Module2”,我也可以使用之前的命令执行它。
我需要同时运行两个模块。我该怎么做?
【问题讨论】:
根据您对目标appengine:run 的使用情况,我了解到您正在使用本地开发服务器测试您的应用程序。通过查看 the documentation for appengine:run,您可以使用标志 port 在不同端口上启动开发服务器的两个独立实例。
您可以使用如下命令定义该标志:
mvn appengine:run -Dapp.devserver.port=<PORT_NUMBER>
开发服务器中的默认端口号是 8080,因此您可以,例如,为您的 Module1 使用端口 8080,然后使用不同的端口,例如8082 用于您的 Module2。这样你就可以移动到你的两个服务所在的目录,用不同的端口号运行这两个命令,然后你就可以分别在localhost:8080和localhost:8082访问它们了。
其实如in the documentation所说:
如果你的项目的根目录只包含你的服务,你 可以使用单个 Maven 命令部署所有这些服务。
这既适用于生产环境(App Engine)中的部署,也适用于开发服务器中的部署。因此,如果您适当地配置您的应用程序,您可以使用单个 mvn appengine:run 命令在同一个开发服务器实例中启动这两个服务(它们仍将在不同的端口中启动)。
因此,为了配置 Java GAE 应用程序及其所有服务,您可以遵循此(与本主题无关)migration guide 中提出的相同想法。为此,当您在 default 服务的 pom.xml 文件中配置 com.google.cloud.tools » appengine-maven-plugin 时,您必须添加<services> 标记,包括应用程序中的所有服务,由 default 服务开始:
<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 将启动一个包含所有服务的开发服务器。对于开发服务器的情况,您可以访问localhost:PORT/_ah/admin 中的服务器管理员,然后移动到 Modules 选项卡以查找每个正在运行的服务的 URL:
我希望这两种选择中的一种(尽管我会选择第二种)对您的用例有用。
【讨论】: