在RockyLinux 9服务器上安装Tomcat 9时,如何避免依赖自动安装Java 11(已预装Java 8)
在RockyLinux 9服务器上安装Tomcat 9时,如何避免依赖自动安装Java 11(已预装Java 8)
你遇到的问题本质是RockyLinux 9仓库里的java-1.8.0-openjdk-headless包确实没有包含Provides: java-headless的元数据,导致yum无法识别它满足Tomcat对java-headless >=1:1.8.0的依赖,只能默认拉取Java 11的包。下面给你几个可行的解决方案,按推荐程度排序:
方法一:修改Java 8包的元数据,让它提供java-headless依赖
这个方法最贴合你的需求,通过修改rpm包的元数据,让yum认可Java 8满足Tomcat的依赖:
- 先安装
rpmrebuild工具,用来修改rpm包:dnf install rpmrebuild -y - 提取并编辑Java 8包的spec配置文件:
rpmrebuild -e -p $(rpm -q java-1.8.0-openjdk-headless) - 在打开的编辑器里,找到
%description字段之前的位置,添加一行内容:Provides: java-headless = 1:1.8.0 - 保存并退出编辑器,
rpmrebuild会自动在/root/rpmbuild/RPMS/x86_64/目录下生成修改后的rpm包。 - 先卸载原来的Java 8包:
(如果提示有依赖冲突,可以临时加rpm -e java-1.8.0-openjdk-headless--nodeps参数,之后确保重新安装修改后的包即可) - 安装修改后的rpm包:
rpm -ivh /root/rpmbuild/RPMS/x86_64/java-1.8.0-openjdk-headless-*.el9.x86_64.rpm - 现在再安装Tomcat,yum就会识别到Java 8满足依赖,不会再自动安装Java 11了:
dnf install tomcat -y
方法二:手动安装Tomcat二进制包,绕过yum依赖检查
如果不想修改rpm包,直接从Apache官方下载Tomcat二进制包手动安装也是个稳妥的选择,完全避开yum的依赖管理:
- 下载最新的Tomcat 9二进制包(可以替换成你需要的版本):
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz - 将包解压到
/usr/local目录:tar -xzf apache-tomcat-9.0.80.tar.gz -C /usr/local/ - 创建软链接,方便后续版本切换:
ln -s /usr/local/apache-tomcat-9.0.80 /usr/local/tomcat - 创建tomcat专用用户,避免用root运行服务:
useradd -r -m -U -d /usr/local/tomcat -s /sbin/nologin tomcat - 设置目录权限:
chown -R tomcat:tomcat /usr/local/tomcat/ - 创建systemd服务文件,方便管理Tomcat服务:
创建/usr/lib/systemd/system/tomcat.service文件,写入以下内容:[Unit] Description=Apache Tomcat Web Application Container After=network.target [Service] Type=forking Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk Environment=CATALINA_PID=/usr/local/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/usr/local/tomcat Environment=CATALINA_BASE=/usr/local/tomcat Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom' ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh User=tomcat Group=tomcat UMask=0007 RestartSec=10 Restart=always [Install] WantedBy=multi-user.target - 重新加载systemd配置并启动Tomcat服务:
systemctl daemon-reload systemctl enable --now tomcat
方法三:临时跳过依赖检查(不推荐)
虽然可以用dnf的参数强制跳过依赖,但这种方法可能导致Tomcat缺少其他必要依赖,引发未知问题,仅作为应急手段:
dnf install tomcat --nodeps -y
安装后记得手动确认Tomcat能正常启动,并且通过update-alternatives将Java 8设为默认:
update-alternatives --set java /usr/lib/jvm/java-1.8.0-openjdk/bin/java
备注:内容来源于stack exchange,提问作者nathou




