在开发模式下使用Quarkus的Maven多模块项目

2022-09-04 04:33:07

我是Quarkus的新手,并尝试在Maven多模块项目中使用它。我的项目结构如下:

- quarkustest (pom)
  - quarkustest-application (jar)
  - quarkustest-backend (pom)
    - quarkustest-backend-rest-api (jar)
  - quarkustest-dependencies (pom)
  - quarkustest-parent (pom)

应用程序模块执行具有构建目标的quarkus-maven-插件。包含一个简单的 REST 控制器,因此也是一个 in。rest-api-module 由应用程序模块引用。quarkustest-backend-rest-apibeans.xml/src/main/resources/META-INF

如果我将整个项目打包为 ,则生成的运行器 jar 按预期工作。但是,如果我尝试在开发模式下启动项目,我会得到以下异常:mvn packagemvn compile quarkus:dev

ERROR] 未能在项目 quarkustest-application 上执行目标 io.quarkus:quarkus-maven-plugin:1.0.0.CR2:dev (default-cli): 未能运行: 无法解决 Quarkus 应用程序模型: 无法解析 test 的依赖关系。quarkustest:quarkustest:quarkustest-application:jar:1.0.0-SNAPSHOT: 找不到 artifact test.quarkustest:quarkustest-backend-rest-api:jar:1.0.0-SNAPSHOT -> [Help 1]

我不太确定如何解决这个问题。夸库的多模块项目是否有任何最佳实践?我在这里犯了什么明显的错误?

编辑 1(相关 pom 文件)

quarkustest-application

<parent>
    <groupId>test.quarkustest</groupId>
    <artifactId>quarkustest-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>../quarkustest-parent</relativePath>
</parent>

<artifactId>quarkustest-application</artifactId>

<dependencies>
    <dependency>
        <groupId>test.quarkustest</groupId>
        <artifactId>quarkustest-backend-rest-api</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-maven-plugin</artifactId>
            <version>${quarkus-plugin.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>build</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

夸库斯特-父

<parent>
    <groupId>test.quarkustest</groupId>
    <artifactId>quarkustest-dependencies</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>../quarkustest-dependencies</relativePath>
</parent>

<artifactId>quarkustest-parent</artifactId>
<packaging>pom</packaging>

quarkustest-dependencies

<groupId>test.quarkustest</groupId>
<artifactId>quarkustest-dependencies</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>

<properties>
    ...
</properties>

<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>test.quarkustest</groupId>
            <artifactId>quarkustest-backend-rest-api</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <plugin>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-maven-plugin</artifactId>
            <version>${quarkus-plugin.version}</version>
        </plugin>
    </plugins>
</build>

quarkustest (aggregator)

<parent>
    <groupId>test.quarkustest</groupId>
    <artifactId>quarkustest-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>quarkustest-parent</relativePath>
</parent>

<artifactId>quarkustest</artifactId>
<packaging>pom</packaging>

<modules>
    <module>quarkustest-dependencies</module>
    <module>quarkustest-parent</module>
    <module>quarkustest-backend</module>
    <module>quarkustest-application</module>
</modules>

答案 1

如果您从未运行过它,可能是因为当您在子项目中时,maven不会在其同级项目中查找以解析依赖项,它只会在不包含依赖项的本地maven存储库中查找。如果您已经运行了它,则可能是其他因素在起作用。mvn installmvn install


答案 2

将 quarkus-maven-plugin 保留在 quarkustest 应用程序中并运行

  1. mvn 全新安装
  2. mvn quarkus:dev -pl quarkustest-application

现在,它将拾取所有子模块中的更改。


推荐