首页 > 解决方案 > Maven 模块和 quarkus 编译/实时重新加载

问题描述

我的项目(称为 tesa)由两个模块组成:tesa-app 和 tesa-domain

+ tesa (pom.xml)

+----tesa-modules (pom.xml)
   
+-------tesa-app (pom.xml)

+-------tesa-domain (pom.xml)

问题是,每当我对tesa-domain模块进行更改而不是运行./mvnw -f modules/tesa-app/pom.xml compile quarkus:dev以启动我的 quarkus 应用程序时,域中的更改都不会被考虑在内。

因此,每次我对域进行更改时,我都需要运行 `mvn clean install. 这太烦人了。更何况,实时重新加载也无法正常工作。

知道如何解决这个问题吗?


最外层的 pom.xml

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.liv.services.doom</groupId>
  <artifactId>tesa</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <parent>
    <groupId>org.liv.services.core</groupId>
    <artifactId>quarkus-config</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>../core/quarkus-config/pom.xml</relativePath>
  </parent>

  <modules>
    <module>modules</module>
  </modules>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.liv.services.doom</groupId>
        <artifactId>tesa-domain</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.liv.services.doom</groupId>
        <artifactId>tesa-app</artifactId>
        <version>${project.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
</project>

模块 pom.xml

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>tesa-modules</artifactId>
  <packaging>pom</packaging>

  <parent>
    <groupId>org.liv.services.doom</groupId>
    <artifactId>tesa</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <modules>
    <module>tesa-app</module>
    <module>tesa-domain</module>
  </modules>

  <dependencies>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-arc</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-junit5</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.jetbrains.kotlin</groupId>
      <artifactId>kotlin-stdlib-jdk8</artifactId>
    </dependency>
    <dependency>
      <groupId>io.mockk</groupId>
      <artifactId>mockk</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

应用程序 pom.xml :

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.liv.services.doom</groupId>
  <artifactId>tesa-app</artifactId>

  <parent>
    <groupId>org.liv.services.doom</groupId>
    <artifactId>tesa-modules</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <dependencies>
      <dependency>
        <groupId>org.jetbrains.kotlinx</groupId>
        <artifactId>kotlinx-coroutines-core</artifactId>
      </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-kotlin</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-resteasy</artifactId>
    </dependency>
    <dependency>
      <groupId>io.rest-assured</groupId>
      <artifactId>rest-assured</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-smallrye-reactive-messaging-amqp</artifactId>
    </dependency>
    <dependency>
      <groupId>org.liv.services.doom</groupId>
      <artifactId>solver-domain</artifactId>
    </dependency>
  </dependencies>
</project>

域 pom.xml

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.liv.services.doom</groupId>
  <artifactId>tesa-domain</artifactId>

  <parent>
    <groupId>org.liv.services.doom</groupId>
    <artifactId>tesa-modules</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>
</project>

标签: mavenintellij-ideaquarkus

解决方案


有趣的。-f这可能与将 Maven 反应器限制为指定模块的事实有关。但是,Quarkus 引导程序正在执行自己的工作区发现,它将找到您的模块,并且一旦启动开发模式,对这些模块的更改将被拾取。因此,似乎只有初始启动没有将源正确同步到依赖模块中的类。我想你可以为它打开一个问题。

但是,假设只有app模块包含,您可以简单地从根项目目录中quarkus-maven-plugin删除-f并执行,这应该可以工作。quarkus:dev


推荐阅读