debian 12安裝openjdk 17步骤及tomcat 10.1.26配置指定jdk的步骤记录
背景
上一篇文章里,我说需要使用tomcat 10.1.26,但是不支持jdk 1.8.0_281的版本,想来想去,重新安装jdk是最方便的做法。
原本 环境里是tomcat9,还需要用jdk 1.8,所以后续启动tomcat 10.1.26前只需要指定jdk启动应该就可以了。
理论是这样的,实践看看。
这里先记录一下debian 12里安装OpenJDK 17以及tomcat 10.1.26配置指定jdk的步骤。
1、更新源
sudoapt update 
2、指定安装openjdk 17
sudoaptinstall -y openjdk-17-jdk 
等待安装完毕:

至此安装完毕,根据输出信息可以知道openjdk 17的安装目录在: /usr/lib/jvm/java-17-openjdk-amd64/
3、确认openjdk 17环境信息是否生效
在安装openjdk 17之前,我通过命令ls -l $(which java)
查询java的真实路径结果如下:

而我安装之后再次查询结果如下:

这里是没有变化的。
所以需要确认有没有安装好是不能通过java -version 或者javac -version这种命令的。
按照安装过程,我们可以通过查询软链接来确认新安装的openjdk 17的位置。
查询软链接命令: readlink -f /usr/bin/java | sed “s:/bin/java::”

readlink -f 命令可以快速的找到软链接文件指向的文件,如果不是软链接则显示文件本身的路径。
当然也可以通过ls -l 命令,重复去寻找,如下图所示:

至此把这个找到的jdk路径记下来: /usr/lib/jvm/java-17-openjdk-amd64/bin/java
3、配置tomcat 10.1.26指定jdk
cd bin/ 跳转到tomcat 10的bin目录:
$ pwd /opt/tomcat/apache-tomcat-10.1.26/bin 这里我们新建一个setenv.sh文件,用于自定义 Tomcat 启动参数的文件,Tomcat 官方明确推荐用这个文件来设置JAVA_HOME、JVM参数(Xms/Xmx)、CATALINA_OPTS等,避免直接修改catalina.sh等核心脚本。 这个文件默认没有。
3.1手动新建setenv.sh
sudonano setenv.sh sudo nano命令可直接新建打开并编辑。
编辑内容参考如下:

此时该文件是没有可执行权限的,为了让tomcat启动时可以正常执行该文件,需要添加可执行权限:

sudochmod +x setenv.sh 
这里还有一个问题,那就是我们是通过sudo 创建的setenv.sh此时他的用户权限是root,为了保证用户的一致性,我们需要再调整文件的属组。
sudochown user:user setenv.sh 将用户数组改成自己的就可以了。
3.2验证tomcat启动的jdk信息
理想是丰满的,现实是骨感的,你看运行tomcat时,又报错了:

错误信息:
./catalina.sh: 3: /opt/tomcat/apache-tomcat-10.1.26/bin/setenv.sh: /usr/lib/jvm/java-17-openjdk-amd64/: Permission denied
权限出了问题!权限不足,这好办,加权限,根据这个文件夹的属组情况,只要将文件夹授权给当前用户就可以了。
sudo chown -R x:x /usr/lib/jvm/java-17-openjdk-amd64/
除此之外,还需要注意到启动时候的jre的路径:Using JRE_HOME: /opt/tomcat/jdk1.8.0_281/jre
也需要更改,因此将其加到setenv.sh文件中
这里有个关键点,就是在setenv.sh文件里写openjdk 17的JRE_HOME以及JAVA_HOME路径的时候写到jdk的根目录就可以了。如图:

到这里重新启动tomcat 10就基本可以启动了,但尚未成功,因为我的环境里原本有tomcat,并且已经占用了常用端口8080与关闭端口8005,因此需要先修改这两个端口。
跳转conf目录,修改server.xml:
@debian12:/opt/tomcat/apache-tomcat-10.1.26/conf$ pwd /opt/tomcat/apache-tomcat-10.1.26/conf sudonano server.xml 找到如下内容:shutdown="SHUTDOWN"以及原本的8080端口,以下截图为修改后的。注意指定端口是否可用。
(比如截图里使用的80015、80180就不能用哈,别掉坑啦!会报错:java.lang.IllegalArgumentException: Port value out of range:xxxx )


修改好之后再次启动,可以发现成功啦!

可以看到java环境变量就是我们指定的,虽然还在报错permission denied 但看着似乎没有影响了。 且看后续如何吧!
就暂时这样吧~
下篇文章见~