【问题标题】:Maven multi module project with Quarkus in dev modeQuarkus 开发模式下的 Maven 多模块项目
【发布时间】:2019-11-27 16:59:31
【问题描述】:

我是 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 控制器,因此在 /src/main/resources/META-INF 中也有一个 beans.xml。 rest-api-module 是应用程序模块的引用。

如果我使用mvn package 打包整个项目,则生成的 runner-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>
    <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>

【问题讨论】:

标签: java maven quarkus


【解决方案1】:

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

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

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

【讨论】:

  • 这是最好的答案,但仍然不是理想的情况。 Quarkus 不会拾取新创建的类,有时它会丢失,我必须重新启动:/
【解决方案2】:

如果您从未运行过mvn install,这可能是因为当您在子项目中时,maven 不会查看其兄弟项目来解决依赖关系,它只会查看不包含依赖关系的本地 maven 存储库.如果你跑过mvn install,那可能还有别的东西在起作用。

【讨论】:

  • 好了,现在 Quarkus 可以启动开发服务器了,但是 rest-api-module 中的更改并没有反映在正在运行的应用程序中。在更改可见之前,我必须再次使用“mvn install”构建 rest-api。
  • 如果您要调整此处链接的答案stackoverflow.com/a/26448447/12350741,您也许可以在父 pom.xml 中运行mvn quarkus:dev。您需要在除 quarkustest-application 之外的每个子模块中添加 &lt;configuration&gt;&lt;skip&gt;true&lt;/skip&gt;&lt;/configuration&gt;,它可能会执行您想要的操作。
  • 从顶级聚合器运行命令不是问题。我已经可以做到这一点,因为我将插件添加到父级并确保应用程序模块是唯一实际执行 Quarkus 插件的模块。但是,我继续并跳过了所有其他模块中的插件执行。它没有解决我的问题。
  • 如果它仍然没有拾取子模块中的更改,它可能只是您选择的项目结构的一个属性。我不知道除了合并子模块之外如何解决你的问题,但如果这是可以接受的,我猜你会这样做......
  • 遇到了同样的问题。这为我解决了。我的项目由一个模块组成,现在我已将其拆分,尝试在 IDE 中运行测试将返回“未找到测试”。在根目录上运行 mvn install 有效。
【解决方案3】:

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

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

-Dmaven.am -Dmaven.pl=&lt;name-of-you-quarkus-module&gt;

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

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

【讨论】:

  • 奇怪的是这应该可以工作(参数正确地转到命令行)但它对我不起作用。
猜你喜欢
  • 2018-02-06
  • 1970-01-01
  • 2014-09-14
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
相关资源
最近更新 更多