多jdk版本环境下,jenkins系统设置需指定JAVA_HOME环境变量

一、背景

由于不同项目对jdk版本的要求不同,有些是要求jdk11,有些只需要jdk8即可。
而linux机器上安装jdk的方式又多种多样,最后导致jenkins打包到底使用的是哪个jdk,比较混乱。

1、java在哪

在这里插入图片描述

> whereis java
java: /usr/bin/java /opt/jdk-11.0.17/bin/java /opt/jdk1.8.0_351/bin/java /usr/share/man/man1/java.1

可以看到这里有三个java版本:

  • /usr/bin/java (原先安装的jdk)
  • /opt/jdk-11.0.17/bin/java
  • /opt/jdk1.8.0_351/bin/java (新安装的jdk,期望使用该版本)

这里的安装方式有两种:

  • update-alternatives 多版本管理软件(第一个)
  • 手动安装(后两者)

2、什么是update-alternatives

在 CentOS 和许多其他 Linux 发行版中,/etc/alternatives 目录是用来管理软件的多个版本的。这是一个系统级别的工具,用于在安装了多个版本的同一软件时选择默认版本。

对于 Java,当你安装不同版本的 JDK 时,每个版本的二进制文件(如 java, javac, javadoc 等)都会被放置在 /etc/alternatives 目录下,并且会创建指向这些二进制文件的符号链接(symlink)。这些符号链接位于 /usr/bin 目录下,以便用户可以通过标准的命令行接口访问这些工具。

见/usr/bin目录下:
在这里插入图片描述

例如,如果你运行 java -version,系统实际上是在运行 /etc/alternatives/java 指向的版本。/etc/alternatives 目录中的每个 Java 相关文件都是一个脚本,它检查 JAVA_HOME 环境变量,如果设置了,就使用它;如果没有设置,它会使用 update-alternatives 系统配置的默认值。

在这里插入图片描述

> update-alternatives --config java

There is 1 program that provides 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/java/jdk1.8.0_181-amd64/jre/bin/java

Enter to keep the current selection[+], or type selection number:

3、手动安装jdk

解压缩至某个目录,然后配置jdk环境变量。
在这里插入图片描述

export JAVA_HOME=/opt/jdk1.8.0_351
export PATH=$PATH:$JAVA_HOME/bin

二、到底用的是哪个jdk

1、maven

当你执行mvn -v命令,看到它使用的jdk是我们期望的/opt/jdk1.8.0_351/bin/java版本。

在这里插入图片描述

> mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /opt/maven
Java version: 1.8.0_351, vendor: Oracle Corporation, runtime: /opt/jdk1.8.0_351/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-642.el6.x86_64", arch: "amd64", family: "unix"

所以,在jenkins机器上,手动mvn package打包,没问题。

但是,当你执行java -version的时候,发现并不是/opt/jdk1.8.0_351/bin/java
在这里插入图片描述

> java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

说明虽然设置了JAVA_HOME环境变量,但是/usr/bin/java的优先级更高。

这一点,我们从whereis java的顺序也可以看出。

2、jenkins

在没有设置JAVA_HOME的情况下,默认使用的jdk是/usr/java/jdk1.8.0_181-amd64/jre/bin/java

所以第一次打包报错:

在这里插入图片描述

三、jenkins系统设置

指定JAVA_HOME环境变量,明确jenkins在众多jdk中选择哪个jdk

在这里插入图片描述
在这里插入图片描述

  • JAVA_HOME : /opt/jdk1.8.0_351
    在这里插入图片描述

再次打包,jenkins就能选择出你所需的jdk版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/890695.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sql实战解析-sum()over(partition by xx order by xx)

该窗口函数功能 sum( c )over( partition by a order by b) 按照一定规则汇总c的值,具体规则为以a分组,每组内按照b进行排序,汇总第一行至当前行的c的加和值。 从简单开始一步一步讲, 1、sum( )over( ) 对所有行进行求和 2、sum(…

第二十五:IP网络层的数据,IP数据报

在数据链路层传输的数据叫帧,帧是数据链路层的传输单元。 那么在IP网络层的数据也有一个叫法IP数据报。 IP数据报 IP数据报首部 数据。 数据是传输层传递过来的报文;IP数据报首部格式如下: IP 报头的最小长度为 20 字节,上图…

打造爆款店铺:eBay、Temu、亚马逊卖家如何借助测评提升流量转销量?

无论是eBay还是在亚马逊、沃尔玛、Temu、速卖通、敦煌网、shopee、lazada平台上,流量是店铺获得曝光和销售的关键因素之一。提高店铺流量意味着能够吸引更多的买家浏览和关注,从而增加销售机会。那么,在eBay、Temu、亚马逊店铺中如何有效地提…

大模型还能让我们望梅止渴多久?

大模型梦碎的时间点似乎越来越近。过去一周,有关人工智能的消息糟糕多于积极。 周初,诺贝尔物理学奖和化学奖接连砸向时下正热的人工智能领域。这些奖项出人意料且鼓舞人心,意味着人工智能的确已经根本性地改变了我们生活和科学体系的方方面…

这是我见过最全LLM大模型基础知识学习汇总,建议收藏!

关于如何入门LLM,大多数回答都提到了调用API、训练微调和应用。但是大模型更新迭代太快,这个月发布的大模型打榜成功,仅仅过了一个月就被其他模型超越。训练微调也已经不是难事,有大量开源的微调框架(llamafactory、fi…

大模型本地部署教程 | 搭建本地AI问答系统

前言 大家好,因为对AI大模型很感兴趣,相信很多兄弟们跟我一样,所以最近花时间了解了一些,有一些总结,分享给大家,希望对各位有所帮助。 本文将讲解如何在本地搭建一个简易的AI问答系统,主要用j…

【网络】【Linux】多路转接技术

多路转接技术 文章目录 1.select1.1select系统调用及参数介绍1.2select基本工作流程1.3select技术实现echo服务器1.4select优缺点1.5select的适用场景 2.poll(了解)2.1poll系统调用及参数介绍2.2poll技术实现echo服务器2.3poll优缺点 3.epoll3.1epoll系…

探索 ES6 生成器 ( Generator ) 的异步编程应用

一. 前言 在之前的文章中,我们介绍了生成器函数的基本概念和常见应用,包括异步操作的顺序执行、控制异步流程等,同时也了解到 Promise 和生成器结合的应用可以帮助我们更方便地处理异步操作。详细了解请参考之前的文章: 学习 ES…

前端Vue3字体优化三部曲(webFont、font-spider、spa-font-spider-webpack-plugin)

前端Vue字体优化三部曲(webFont、font-spider、spa-font-spider-webpack-plugin) 引言 最近前端引入了UI给的思源黑体字体文件,但是字体文件过于庞大,会降低页面首次加载的速度,目前我的项目中需要用到如下三个字体文…

Java 8 的内存结构

Java8内存结构图 虚拟机内存与本地内存的区别 Java虚拟机在执行的时候会把管理的内存分配成不同的区域,这些区域被称为虚拟机内存,同时,对于虚拟机没有直接管理的物理内存,也有一定的利用,这些被利用却不在虚拟机内存…

每天3分钟,彻底弄懂神经网络的优化器(十)Nadam

1. Nadam算法的提出 Nadam(Nesterov-accelerated Adaptive Moment Estimation)算法是由Tim Salimans et al. 在2016年提出的。这一算法结合了Adam算法和Nesterov Accelerated Gradient(NAG)算法的优点,旨在提高优化算…

[运维]6.github 本地powershell登录及设置ssh连接

当我在本地的git hub 进行修改后,需要推送到远程github仓库。 当我运行了git add . git commit -m "ingress-controller image" 以后,运行git push origin main,发现由于网络原因无法连接到远程github仓库。 此时开始设置ssh连…

MySQL中表的约束

1,概念 表中一定要有各种约束,通过约束,让我们来插入数据库中的数据是符合预期的。 约束本质是通过技术手段,倒逼程序员插入正确的数据;反过来,站在MySQL的角度来单,内部已经插进来的数据&…

即插即用hilo注意力机制,捕获低频高频特征

题目:Fast Vision Transformers with HiLo Attention 论文地址: https://arxiv.org/abs/2205.13213 创新点 HiLo自注意力机制:作者提出了一种新的自注意力机制,称为HiLo注意力,旨在同时捕捉图像中的高频和低频信息。该方法通过…

通信工程学习:什么是SPI串行外设接口

SPI:串行外设接口 SPI,即串行外设接口(Serial Peripheral Interface),是一种由Motorola公司首先在其MC68HCXX系列处理器上定义的同步串行接口技术。SPI接口主要用于微控制器(MCU)与外部设备之间…

1. 到底什么是架构

1. 什么是架构 定义:架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计优秀架构的特点:优秀的性能、超强的TPS/QPS的承载能力、高可用决定了你能够支撑多少PV的流量 2. 什么…

【Linux修炼进程之权限篇】探讨Linux权限问题

【Linux修炼】——权限问题 目录 一:认识Linux下用户的分类 1.1:如何添加新用户【使用root用户创建添加】 1.2:su指令用法 二:Linux下权限是什么? 2.1:权限所认证的是身份(人身份角色) 2.2&#xff…

【WPF】04 Http消息处理类

这里引入微软官方提供的HttpClient类来实现我们的目的。 首先,介绍一下官方HttpClient类的内容。 HttpClient 类 定义 命名空间: System.Net.Http 程序集: System.Net.Http.dll Source: HttpClient.cs 提供一个类,用于从 URI 标识的资源发送 HTTP 请…

dbt doc 生成文档命令示例应用

DBT提供了强大的命令行工具,它使数据分析师和工程师能够更有效地转换仓库中的数据。dbt的一个关键特性是能够为数据模型生成文档,这就是dbt docs命令发挥作用的地方。本教程将指导您完成使用dbt生成和提供项目文档的过程。 dbt doc 命令 dbt docs命令有…

Gitxray:一款基于GitHub REST API的网络安全工具

关于Gitxray Gitxray是一款基于GitHub REST API的网络安全工具,支持利用公共 GitHub REST API 进行OSINT、信息安全取证和安全检测等任务。 Gitxray(Git X-Ray 的缩写)是一款多功能安全工具,专为 GitHub 存储库而设计。它可以用于…