You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Quarkus多模块Maven项目配置Dev Container,实现多模块同时运行quarkus:dev

解决Quarkus多模块Maven项目Dev Container多服务并行开发问题

我有一个使用Quarkus的Maven多模块项目,结构如下:

<project>
  <modules>
     <module>web</module>
     <module>customer</module>
     <module>warehouse</module>
     <module>payment</module>
  </modules>
</project>

项目遵循Quarkus多模块最佳实践及官方指南,依赖关系型数据库(RDBMS)和缓存,因此用docker-compose.yml配置了Dev Container。每个模块都是带HTTP接口的独立微服务。

当前开发痛点:

  • 运行quarkus dev(或mvn compile quarkus:dev)时,单个模块以开发模式启动
  • 开发web模块时,需要在compose文件中引入其他模块的编译版本;开发customer模块时,又要另写compose文件加载web的编译版和customer的源码,每个模块对应一个compose文件
  • 切换开发模块时,必须终止Dev Container、换配置重启,过程缓慢还得处理数据库持久化问题

问题:有没有办法配置Dev Container环境,让多模块Maven项目能同时在多个子模块上运行quarkus:dev,避免反复关机重配置重启的循环?


可行解决方案

1. 单Dev Container + 多终端启动各模块开发模式

在Dev Container中挂载整个项目源码,启动容器后打开多个终端窗口,分别进入对应子模块目录执行quarkus dev命令。

  • 配置要点:
    • docker-compose.yml只包含数据库、缓存等基础依赖服务,不包含任何Quarkus模块镜像
    • 在.devcontainer/devcontainer.json中配置Maven、JDK等开发环境,确保容器内可编译运行Quarkus项目
    • 各模块的application.properties中设置不同的quarkus.http.port,避免端口冲突

2. 通用Docker Compose多服务配置

编写一个统一的docker-compose.yml,将每个Quarkus模块作为独立服务,挂载源码目录并配置开发模式启动命令。

示例配置:

version: '3.8'
services:
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: quarkus
      POSTGRES_PASSWORD: quarkus
      POSTGRES_DB: quarkus_dev
    ports:
      - "5432:5432"
    volumes:
      - db-data:/var/lib/postgresql/data

  cache:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - cache-data:/data

  web:
    build:
      context: ./web
      dockerfile: src/main/docker/Dockerfile.jvm
    command: mvn compile quarkus:dev
    volumes:
      - ./web:/workspace
      - ~/.m2:/root/.m2
    ports:
      - "8080:8080"
    environment:
      QUARKUS_DATASOURCE_JDBC_URL: jdbc:postgresql://db:5432/quarkus_dev
      QUARKUS_REDIS_HOST: cache
    depends_on:
      - db
      - cache

  customer:
    build:
      context: ./customer
      dockerfile: src/main/docker/Dockerfile.jvm
    command: mvn compile quarkus:dev
    volumes:
      - ./customer:/workspace
      - ~/.m2:/root/.m2
    ports:
      - "8081:8081"
    environment:
      QUARKUS_DATASOURCE_JDBC_URL: jdbc:postgresql://db:5432/quarkus_dev
      QUARKUS_REDIS_HOST: cache
    depends_on:
      - db
      - cache

  warehouse:
    build:
      context: ./warehouse
      dockerfile: src/main/docker/Dockerfile.jvm
    command: mvn compile quarkus:dev
    volumes:
      - ./warehouse:/workspace
      - ~/.m2:/root/.m2
    ports:
      - "8082:8082"
    environment:
      QUARKUS_DATASOURCE_JDBC_URL: jdbc:postgresql://db:5432/quarkus_dev
      QUARKUS_REDIS_HOST: cache
    depends_on:
      - db
      - cache

  payment:
    build:
      context: ./payment
      dockerfile: src/main/docker/Dockerfile.jvm
    command: mvn compile quarkus:dev
    volumes:
      - ./payment:/workspace
      - ~/.m2:/root/.m2
    ports:
      - "8083:8083"
    environment:
      QUARKUS_DATASOURCE_JDBC_URL: jdbc:postgresql://db:5432/quarkus_dev
      QUARKUS_REDIS_HOST: cache
    depends_on:
      - db
      - cache

volumes:
  db-data:
  cache-data:
  • 优势:所有服务统一管理,启动一次即可同时运行所有模块的开发模式,修改源码后自动热重载
  • 注意事项:确保各模块端口不冲突,挂载本地Maven仓库加速依赖下载,数据库和缓存使用持久化卷保留数据

3. 结合Quarkus Dev Services简化依赖管理

如果不需要手动维护Docker Compose中的数据库和缓存,可使用Quarkus内置的Dev Services,它会自动启动所需依赖服务,无需额外compose配置。

  • 配置方式:在各模块的application.properties中添加:
    # PostgreSQL Dev Services
    quarkus.datasource.db-kind=postgresql
    quarkus.datasource.devservices.enabled=true
    
    # Redis Dev Services
    quarkus.redis.devservices.enabled=true
    
  • 搭配单Dev Container多终端的方式,进一步简化开发流程

内容的提问来源于stack exchange,提问作者stwissel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 11:37:33