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
并将配置文件重命名为 app1
和 app2
,您可以使用 mvn -Papp1 compile 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
并将配置文件重命名为 app1
和 app2
,您可以使用 mvn -Papp1 compile quarkus:dev
.