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 但看着似乎没有影响了。 且看后续如何吧!

就暂时这样吧~
下篇文章见~

Read more

Neo4j下载安装教程手把手演示(Windows、MacOS、Linux等平台安装包&官方文档、查询语言文档&均附下载链接)

Neo4j下载安装教程手把手演示(Windows、MacOS、Linux等平台安装包&官方文档、查询语言文档&均附下载链接)

目录 * Neo4j 简介 * Neo4j 下载 * Neo4j 安装(演示为Windows10环境) * 配置环境变量 * 启动和访问 * 参考文档下载 Neo4j 简介 最近正好做项目需要用到知识图谱,记录一下。 Neo4j 是一个高性能、基于图形数据库的 NoSQL 数据库,支持复杂的关系建模和查询,使用 Cypher 语言进行查询操作。它广泛应用于社交网络、推荐系统、知识图谱等领域。 官方网站: https://neo4j.com Neo4j 下载 方式①: * Windows * Linux/MacOS * Red Hat Linux * Debian/Ubuntu 访问官网:Neo4j 下载页面 方式②:离线下载安装包,点击即下(推荐!!!): Neo4j

By Ne0inhk

前端分层架构实战:DDD 与 Clean Architecture 在大型业务系统中的落地路径与项目实践

引言 在某电商后台管理系统的迭代中,我们曾陷入典型的前端业务膨胀困境:修改 “订单拦截规则” 的状态校验逻辑时,需要同时调整 5 个关联组件的代码 —— 业务逻辑散落在组件的 setup 或 methods 中,耦合严重;后续扩展至小程序端时,核心业务逻辑无法复用,需重新编写 60% 的代码;新成员接手时,需花 1 周才能理清 “拦截规则从查询到展示” 的全链路逻辑。 这些问题的核心是 “业务逻辑与技术实现的耦合”。领域驱动设计(DDD)与整洁架构(Clean Architecture) 为解决这些问题提供了思路 —— 通过分层解耦,将 “稳定的业务规则” 与 “多变的技术工具(框架、UI 组件)” 分离,让前端系统具备长期可维护性与可扩展性。 本文结合实际项目实践,详解这两种架构在前端的落地路径。 一、前端 DDD 分层架构:

By Ne0inhk
基于2-RSS-1U的双足机器人并联踝关节分析与实现

基于2-RSS-1U的双足机器人并联踝关节分析与实现

"当你的机器人开始像人类一样思考如何走路时,你会发现,原来最复杂的不是大脑,而是脚踝。"这句话在机器人学界越来越成为共识。论文ASAP中的研究也证实,在sim2real中,偏差最大的正是踝关节控制。 参考文献:On the Comprehensive Kinematics Analysis of a Humanoid Parallel Ankle Mechanism 结构变体:Structural design and motion analysis of parallel ankle joints for humanoid robots 脚踝革命:深入解析人形机器人高性能并联踝关节 传统的单轴踝关节设计,就像给机器人穿了一双"高跟鞋"——虽然能走,但走得很僵硬,很危险。我们需要的是像人类脚踝一样的灵活性:既能前后摆动(pitch),又能左右倾斜(roll)

By Ne0inhk

tao-8k效果对比展示:相同query下不同Embedding模型Top5召回差异

tao-8k效果对比展示:相同query下不同Embedding模型Top5召回差异 今天我们来聊聊一个在向量检索领域非常实际的问题:当你输入一个查询语句时,不同的Embedding模型到底会给你召回什么样的结果?这直接关系到你的搜索、推荐或者问答系统到底好不好用。 最近,一个名为tao-8k的Embedding模型引起了我的注意。它最大的亮点是支持长达8192个token的上下文,这意味着它能处理更长的文本,理论上能捕捉更丰富的语义信息。但理论归理论,实际效果如何?它和市面上其他常见的Embedding模型相比,在召回结果上到底有多大差异? 为了搞清楚这个问题,我设计了一个简单的对比实验:用同一个查询语句,分别让tao-8k和几个主流模型(比如BGE、text2vec等)去一个文档库里找最相似的Top 5结果。结果不看不知道,一看还挺有意思。有些模型找回来的结果看似相关,实则“跑偏”;有些模型则能精准命中核心意图。接下来,我就带大家看看这些差异,并聊聊背后的原因。 1. 实验准备:模型、数据与方法 在开始展示结果之前,我们先得把“擂台”搭好,明确要比什么、怎么比。 1.

By Ne0inhk