quarkus:dev 多模块 maven 构建中的多个 quarkus 应用程序

Multiple quarkus applications in multi-module maven build with quarkus:dev

我有一个包含多个应用程序(不同但密切相关的微服务)的解决方案,这些应用程序共享通用且相当复杂的代码。该项目使用 Maven,当前设置为:

- Root pom
  - Quarkus application 1
  - Quarkus application 2
  - Shared library

我的问题是我想使用开发模式来获取更改,但我无法让它工作。它支持单个 Quarkus 应用程序,并且可以从根文件夹使用 quarkus:dev 进行构建。对于两个 Quarkus 应用程序,不清楚启动了哪个。

我可以使用 Maven 的 -pl 选项 select 我想启动的那个,但是它找不到共享库(因为构建是从 selected 项目而不是根)。要解决这个问题,我可以先安装共享库 (mvn install),但是 Quarkus 自然会使用已安​​装的版本,我想使用实时代码以便获取共享库中的更改。

如果这不可能,我会将模型保留在一个应用程序中,并从另一个应用程序“安装”使用它;这样,实时编码至少应该在其中一个应用程序中工作。在我这样做之前,我想知道是否有一种方法可以通过多个 Quarkus 应用程序来完成我想要的,其中一个特定的应用程序是从顶级 Maven 构建以开发模式启动的?

此限​​制主要来自 Maven。如果您使用 -pl 或 -f 启动应用程序,则无法找到依赖项的是 Maven,而不是 Quarkus,对吧? Quarkus 将发现完整的工作区,但 Maven 在此之前失败。

您可以尝试使用 Maven 配置文件。 IE。一个配置文件将启用包含一个应用程序和另一个配置文件的模块 - 应用程序。当您从根启动时,您将启用您需要的配置文件。

有这样的东西:

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>${quarkus.platform.group-id}</groupId>
        <artifactId>${quarkus.platform.artifact-id}</artifactId>
        <version>${quarkus.platform.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.acme</groupId>
        <artifactId>acme-common</artifactId>
        <version>${project.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <modules>
    <module>common</module>
  </modules>
  <build>
    <plugins>
      <plugin>
        <groupId>${quarkus.platform.group-id}</groupId>
        <artifactId>quarkus-maven-plugin</artifactId>
        <version>${quarkus.platform.version}</version>
        <extensions>true</extensions>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <profile>
      <id>app1Dev</id>
      <modules>
        <module>app1</module>
      </modules>
      <build>
        <defaultGoal>clean compile quarkus:dev</defaultGoal>
      </build>
    </profile>
    <profile>
      <id>app2Dev</id>
      <modules>
        <module>app2</module>
      </modules>
      <build>
        <defaultGoal>clean compile quarkus:dev</defaultGoal>
      </build>
    </profile>
  </profiles>

您可以使用 mvn -Papp1Dev 从项目的根目录启动 app1,使用 mvn -Papp2Dev 启动 app2。

或者您可以删除 defaultGoal 并将配置文件重命名为 app1app2,您可以使用 mvn -Papp1 compile quarkus:dev.

这样的命令