Docker JDK8/17 编译环境编译项目

编程教程 > Docker Case (600) 2024-12-10 09:38:50

前言

随着项目升级,目前存在一些项目是jdk8的一些是jdk17的,让Jenkins 使用主机编译环境成为了问题。故此使用docker环境来编译项目,分离各个版本编译环境。

构建Docker编译镜像

以下以openjdk 17 为例,编译一个openjdk17 +maven 3.9.x的环境。

maven下载

首先下载maven包 Maven – Download Apache Maven

Docker JDK8/17 编译环境编译项目_图示-96c94561683541998159a1263f6b4b33.png
下载tar.gz版本

maven 配置修改

下载完成后使用压缩软件打开压缩包(注意打开不是解压)

Docker JDK8/17 编译环境编译项目_图示-8b08bb6fa1984965af38b72945f45257.png
setting.xml

apache-maven-3.9.9-bin.tar.gz\apache-maven-3.9.9-bin.tar\apache-maven-3.9.9\conf\目录下的setting.xml文件拖出来修改镜像和包的存放地址

Docker JDK8/17 编译环境编译项目_图示-5f0de310e432473295f37c253ae59ef7.png
修改软件包存放位置
Docker JDK8/17 编译环境编译项目_图示-80c0da7ec7be4376bceb9006b517ac20.png
添加一个国内源

修改完毕后将setting.xml文件替换到压缩包里面

创建Dockerfile配置

FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:17
MAINTAINER xqlee
#FROM openjdk:17
ADD apache-maven-3.9.9-bin.tar.gz /usr/local
#env config
#openjdk:17 default JAVA_HOME -> /usr/java/openjdk-17/
ENV CLASSPATH=.:$JAVA_HOME/lib/jrt-fs.jar
ENV MAVEN_HOME=/usr/local/apache-maven-3.9.9
ENV PATH=$PATH:$MAVEN_HOME/bin

命令简介

  • FROM 基于那个镜像
  • MAINTAINER当前描述
  • ADD 添加文件到镜像(tar.gz的压缩文件会自动解压)
  • ENV 设置环境变量

 

构建镜像

将Dockerfile 和 apache-maven-3.9.9-bin.tar.gz 上传到Linux服务器同一个目录,然后执行下面的命令构建镜像

sudo docker build -t openjdk:17-maven3.9 ./

 

Java项目通过Docker环境编译

 

编译命令:

sudo docker run -it --rm --name javac17 -v ~/.m2:/opt/.m2 -v /your/path/app-source:/opt/project -w /opt/project openjdk:17-maven3.9 mvn clean package -Dmaven.test.skip=true

命令简介

  • run - 运行一个容器
  • -it 执行容器命令
  • --rm 容器结束后删除
  • --name  指定容器名称(同一个Jenkins编译多个项目建议这里设置为项目名称防止多个项目并发构建失败
  • -v 主机目录:容器目录 目录挂载
  • -w设置工作目录(执行命令的工作目录)这里很重要不然执行maven命令找不到项目的pom.xml
  • openjdk:17-maven3.9  容器使用的镜像名称
  • mvn clean package -Dmaven.test.skip=true 编译项目命令

提示:把maven的本地仓库挂载出来是为了不用每次都下载包。

Docker JDK8/17 编译环境编译项目_图示-2c69dee7ddb14c7489c55ad2f3b86fa0.png
编译参考

 

以上完成了JDK17版本的编译环境,同样的操作可以在同一个服务器上构建多次,多个版本J8 J17 J22 均可

 

重要提示:

在Jenkins 或者定时任务中执行上面编译命令时候需要去掉 -it 指令,否则会报错

the input device is not a TTY

linux执行定时任务的时候没有终端设备,TTY一词源于Teletypes,或teletypewriters。其实出现该错误和我们的一个习惯有关,一般来说我们启动容器后要与容器进行交互操作,这是,就要加上"-it"这个参数,而在定时任务中,如果让脚本在后台运行,就没有可交互的终端,这就会引发如题所示错误,解决办法就是去掉“-it”这个参数。
 

 

 


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
前言随着项目升级,目前存在一些项目是jdk8的一些是jdk17的,让Jenkins 使用主机编译环境成为了问题。故此使用docker环境来编译项目,分离各个版本
Docker Nodejs 18.20.4 环境编译vue项目 sudo docker run --rm --name node18c -v /your/pro
Docker简介Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可
项目依赖说明Docker compose 示例docker-compose.yml 配置示例version: "3.8"networks: demoRouter
docker 常用命令整理(持续更新)docker运行容器资源相关查看所有运行docker的资源消耗情况docker stats查看指定运行容器资源消耗情况do
Docker从容器复制文件到主机sudo docker cp 容器名称/容器id:容器文件/目录 主机目录示例:sudo docker cp nginx:/et
在执行多次docker-compose build 之后,我们通过命令`docker images`可以看到很多的REPOSITORY 为<none&gtl; 且tag 也是<non...
旧域名:https://hub.docker.com 新域名:https://hubgw.docker.com/
snap 简介如果你在使用 Ubuntu 18.04/20.04 LTS 版本的 Ubuntu 系统,会发现系统里面多了一个应用格式包—— .snap 包。 S
Ubuntu 系统安装DockerUbuntu 在线安装 Docker-XQLEE'Blog (在线安装,需外网好)Ubuntu 安装Docker 国内适用-X
概述接前几篇harbor 2.10.x离线安装Harbor 镜像复制后,这里简述docker配合harbor私服镜像pull(拉取)和push(上传)操作示例。
Docker中容器/镜像的备份、恢复和迁移今天,我们将学习如何快速地对docker容器进行快捷备份、恢复和迁移。Docker是一个开源平台,用于自动化部署应用,
官方命令docker system prune -a特别注意:该命令会删除没有被使用的镜像 over
背景Docker 对于新手开发者部署一些中间件或者开发环境比较友好,可惜官方image hub已被F...。内部使用必须依赖三方的镜像库,例如阿里云的https
Docker报错Error running DeviceCreate (createPool) dm_task_run failed,无法启动问题解决 由于我这