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

ops/2024/10/17 21:10:48/

一、背景

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

java_4">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 javaThere is 1 program that provides 'java'.Selection    Command
-----------------------------------------------
*+ 1           /usr/java/jdk1.8.0_181-amd64/jre/bin/javaEnter 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的顺序也可以看出。

jenkins_90">2、jenkins

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

所以第一次打包报错:

在这里插入图片描述

jenkins_97">三、jenkins系统设置

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

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

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

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


http://www.ppmy.cn/ops/126300.html

相关文章

MySQl数据库的基本操作

1.1创建数据库 使用CREATE DATABASE语句可以轻松创建MySQL数据库,语法如下: CREATE DATABASE 数据库名; 例:创建fruitsales数据库 CREATE DATABASE fruitsales;1.2 查看数据库 使用SHOW语句查看当前服务器下所有已经存在的数据库 SHOW DAT…

python 中*的用处

自己经常混*的用处,为此特意总结记录。 在Python中,函数定义中的*(星号)用于指示位置参数的结束和关键字参数的开始。具体来说,*之后的参数必须以关键字参数的形式传递。 用在函数参数中 在我的例子中: …

Tortoise SVN 安装汉化教程(乌龟SVN)

1.首先下载 去官网下载 如果下载比较慢的,链接自取 https://pan.quark.cn/s/cb6f2eee3f90 2. 安装Tortoise SVN 无脑next到完成 最后到桌面右键 你就发现svn出来了,但是是英文的!!!! 像我这种英文不好的…

牛客小白月赛102:最短?路径(分层bfs)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 给定一个 nnn 个点 mmm 条边的无向图,LH 打算从点 111 出发去点 nnn。 假如 LH 到达了一个点 iii,那么他可以选择在这个点花费 aia_iai​ 的时间休息后继续赶…

蓝桥算法双周赛 第 19 场 小白入门赛

打开石门 只要有相连的一样字母就可以消成一个 string s; int ans;void solve() {cin >> s;int len 0;for (int i 0;i < s.size();i ){if (s[i] L) len ;else //遇到Q{ans (len ? 1 : 0); //消除累计的Llen 0;ans ;//遇到Q}}//QLLLL时,最后遇不到Q让累计的L消…

LangChain中使用Prompt01

1.引入提示模板 from langchain.prompts import (SystemMessagePromptTemplate,AIMessagePromptTemplate,HumanMessagePromptTemplate, )2.设置系统提示 system_template_text"你是一位专业的翻译&#xff0c;能够将{input_language}翻译成{output_language}&#xff0c…

Spring Boot知识管理:跨平台集成方案

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

C++之《剑指offer》学习记录(7):不修改数组找出重复的数字

笔者最近在找工作时&#xff0c;无意间读到了一本名为《剑指offer》的书&#xff0c;粗略翻阅了一下&#xff0c;感觉这将会是一本能让我不再苦恼于笔试和面试“手搓代码”的书。故笔者写下该系列博客记录自己的学习历程&#xff0c;希望能和这本书的读者朋友们一起交流学习心得…