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

教程分享 > Java教程 (214) 2024-09-09 10:26:36

前言

随着项目升级,目前存在一些项目是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”这个参数。
 

 

 

https://www.leftso.com/article/2408211015018952.html

相关文章
前言随着项目升级,目前存在一些项目是jdk8的一些是jdk17的,让Jenkins 使用主机编译环境成为了问题。故此使用docker环境来编译项目,分离各个版本
截至 8 月 19 日,Java 17 已进入第二个也是最后一个候选版本
Spring Boot编译如何更改默认JDK版本?,spring boot,java
docker-compose 报错:[root@VM_0_17_centos gateway]# docker-compose up Building gatewayServer unkno...
在Linux系统中安装和配置Java的运行或者编译jdk环境。安装分两种类型,系统安装包例如centos系列的有rpm包或者通过yum安装;第二总就是Linux通用的方法,下载对应系统的jdk压...
了解JDK、JRE 和 JVM 之间的差异
docker入门使用教程/linux(centos)系统docker制作教程
JDK 11 String 新方法使用教程
JDK11 90+ 新特性新功能(第一部分)开发人员可见功能
JDK11 90+ 新特性新功能(第二部分:非开发人员功能)
在第11次发布之后,人们对JavaFX与JDK脱钩产生了各种各样的感受。我们中的许多人认为现在是时候告别JavaFX并转而采用另一种GUI技术,而其他一些人则对这种情况感到高兴。
windows10如何安装JDK_windows10怎么配置jdk环境变量,windows XP/7/8/10系统配置java运行开发环境即配置jdk环境变量
在本文中,您将学习如何构建用于运行Spring引导应用程序的Docker镜像。我首先给你一个docker的简要概念,然后我们将为我们的spring启动应用程序创建一个docker镜像,并在本地运...
JDK8 从某年某月开始变成个人免费,商用收费了,以至于网上经常搜索到最后一个免费版是jdk那个版本。下面通过Oracle 官方文档来看最后的免费午餐版本是 J
JAVA10 升级后的几个我们值得关注的新特性。尤其是第一个,赶紧看看JDK10的新特性吧。