当前位置: 首页 > news >正文

通过Docker Compose的方式在Docker中安装Maven环境

目前可以说 Docker 已经是在开发部署中成为主流,所以我们很多环境和工具都会安装在 Docker 容器中,Maven 环境是 SpringBoot 项目中最常用的依赖管理工具。当我们使用自动运维工具如 Ansible、Chef 、Puppet、Walle、Spug等)管理和部署 Maven 项目时,就需要在自动运维工具运行环境中有 Maven 环境的支持。

如果这些环境都安装在服务器中并没有安装容器中其实都很好办。但是一旦这些环境都安装在 Docker 容器中时,每当我们安装这些项目依赖工具时往往会遇到一些奇奇葩葩的问题,所以今天对 Docker 中安装 Maven 环境做个简单的记录。

在这安装过程中我使用的是 Docker Compose,所以在此之前需要安装好 Compose。

编写一个更简单的 docker-compose.yml 文件,它只需启动一个 Maven 容器,并暴露 Maven 的一些基本配置。

version: '3'
services:
  maven:
    image: maven:latest
    container_name: maven
    volumes:
      - ~/.m2:/root/.m2 # 主机上 Maven 的本地仓库目录(~/.m2)挂载到容器中的 /root/.m2 目录,这样可以实现 Maven 的缓存持久化,避免每次启动容器都重新下载依赖
      - /path/to/your/settings.xml:/usr/share/maven/conf/settings.xml # 主机上的 settings.xml 文件挂载到容器中的 /usr/share/maven/conf/settings.xml 路径下。这样 Maven 将使用您自定义的 settings.xml 文件
    working_dir: /usr/src/app # 容器的工作目录为 /usr/src/app,以便您可以在容器中执行 Maven 构建命令
    command: sleep infinity # 使用了 sleep infinity 命令来替换默认的 Maven 构建命令。这个命令会让容器永远休眠,从而避免执行任何构建命令

就是这么简单,编写完 yml 文件后直接使用 docker-compose up 启动 Maven 容器就可以了。

如果您希望在宿主机中使用容器中的 Maven 环境,您可以在宿主机上执行 Maven 命令时使用 Docker 执行命令。以下是一个示例:

docker exec maven mvn clean install
# 或
docker-compose exec maven mvn clean install

这个命令将会在 Maven 容器中执行 mvn clean install 命令。这样您就可以在宿主机上使用容器中的 Maven 环境进行构建操作了。

您也可以将这个命令设置为一个别名,以便更方便地在宿主机中使用。例如,您可以在 ~/.bashrc 文件中添加以下行:

alias mvn='docker exec maven mvn'
# 或
alias mvn='docker-compose exec maven mvn'

这样,您只需在终端中执行 mvn 命令,就相当于在 Maven 容器中执行 Maven 命令,从而可以在宿主机中使用容器中的 Maven 环境了。

这么简单也要记录这个安装过程是因为我开始安装时安装官方例子和网上一些教程来进行安装一直失败,所以就做个简单的记录。在官方和网上的一些例子例子中大家对 command 要么没有配置(默认会执行 mvn 命令)要么配置了 clean 和 install,这样的话在启动容器时会去工作目录下找需要编译的项目,如果找不到就会报以下这些错误。

[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/). Please verify you invoked Maven from the correct directory. -> [Help 1]
 

[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy.

相关文章:

  • 配置基于 AWS CRT 的 HTTP 客户端
  • git常用命令
  • mysql mgr集群部署
  • 从 git 分支中合并特定文件,而不是整个分支的内容
  • MinIO 和 Apache Tika:文本提取模式
  • 加固平板电脑在无人机的应用|亿道三防onerugged
  • Git 存储大文件
  • keepalived双主模式测试
  • 如何进行 Github 第三方登录详细讲解 (Java 版本)
  • Linux deb软件包制作
  • Xilinx FPGA——在线升级
  • Rust 基本环境安装
  • Leetcode 21-25题
  • 消息队列RabbitMQ-使用过程中面临的问题与解决思路
  • OpenCV-36 多边形逼近与凸包
  • 【网络安全】什么样的人适合学?该怎么学?
  • NoSQL 数据库管理工具,搭载强大支持:Redis、Memcached、SSDB、LevelDB、RocksDB,为您的数据存储提供无与伦比的灵活性与性能!
  • c#的反汇编对抗
  • 推荐彩虹知识付费商城免授权7.0源码
  • 第99讲:MHA高可用集群配置实战:邮件告警和Binlog服务器搭建详解
  • 力箭二号火箭成功进行满载起竖试验,计划今年首飞发射轻舟飞船
  • 准80后湖北省财政厅副厅长徐晶华已调任襄阳市副市长
  • 商务部:一季度我国服务贸易较快增长,进出口总额同比增8.7%
  • 对话|贝聿铭设计的不只是建筑,更是生活空间
  • 黄晓丹:用“诗心”找到生存的意义
  • 上海超万套保租房供应高校毕业生,各项目免押、打折等优惠频出