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

时间:2019-11-27 16:59:31

标签: java maven quarkus

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

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

应用程序模块使用build-goal执行quarkus-maven-plugin。 quarkustest-backend-rest-api包含一个简单的REST控制器,因此还包含beans.xml中的一个/src/main/resources/META-INF。 rest-api-module是应用程序模块的引用。

如果我将整个项目与mvn package打包在一起,则生成的运行器jar将按预期工作。但是,如果尝试使用mvn compile quarkus:dev在开发模式下启动项目,则会出现以下异常:

  

错误]无法在项目quarkustest-application上执行目标io.quarkus:quarkus-maven-plugin:1.0.0.CR2:dev(default-cli):无法运行:无法解析Quarkus应用程序模型:无法执行解决test.quarkustest:quarkustest-application:jar:1.0.0-SNAPSHOT的依赖项:找不到工件test.quarkustest:quarkustest-backend-rest-api:jar:1.0.0-SNAPSHOT-> [帮助1]

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

编辑1(相关pom文件)

quarkustest-应用程序

<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>

quarkustest-parent

<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依赖项

<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(聚合器)

<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>

3 个答案:

答案 0 :(得分:1)

如果您从未运行过mvn install,可能是因为当您在子项目中时,maven不会查看其兄弟项目来解决依赖关系,而只会查看不包含以下内容的本地maven存储库依赖性。如果您运行过mvn install,可能还有其他原因。

答案 1 :(得分:1)

将 quarkus-maven-plugin 保留在 quarkustest-application 中并运行

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

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

答案 2 :(得分:0)

我能够通过以下方式在 dev 中成功运行 quarkus 子模块(依赖于其他模块):

  1. 安装“Quarkus Run Configs”插件
  2. 为 Quarkus 定义新的运行配置 -> 在 VM 选项中提供额外的 maven 参数:

-Dmaven.am -Dmaven.pl=<name-of-you-quarkus-module>

  1. 在父 pom 中定义 quarkus 插件:

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