You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在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的依赖:

  1. 先安装rpmrebuild工具,用来修改rpm包:
    dnf install rpmrebuild -y
    
  2. 提取并编辑Java 8包的spec配置文件:
    rpmrebuild -e -p $(rpm -q java-1.8.0-openjdk-headless)
    
  3. 在打开的编辑器里,找到%description字段之前的位置,添加一行内容:
    Provides: java-headless = 1:1.8.0
    
  4. 保存并退出编辑器,rpmrebuild会自动在/root/rpmbuild/RPMS/x86_64/目录下生成修改后的rpm包。
  5. 先卸载原来的Java 8包:
    rpm -e java-1.8.0-openjdk-headless
    
    (如果提示有依赖冲突,可以临时加--nodeps参数,之后确保重新安装修改后的包即可)
  6. 安装修改后的rpm包:
    rpm -ivh /root/rpmbuild/RPMS/x86_64/java-1.8.0-openjdk-headless-*.el9.x86_64.rpm
    
  7. 现在再安装Tomcat,yum就会识别到Java 8满足依赖,不会再自动安装Java 11了:
    dnf install tomcat -y
    

方法二:手动安装Tomcat二进制包,绕过yum依赖检查

如果不想修改rpm包,直接从Apache官方下载Tomcat二进制包手动安装也是个稳妥的选择,完全避开yum的依赖管理:

  1. 下载最新的Tomcat 9二进制包(可以替换成你需要的版本):
    wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz
    
  2. 将包解压到/usr/local目录:
    tar -xzf apache-tomcat-9.0.80.tar.gz -C /usr/local/
    
  3. 创建软链接,方便后续版本切换:
    ln -s /usr/local/apache-tomcat-9.0.80 /usr/local/tomcat
    
  4. 创建tomcat专用用户,避免用root运行服务:
    useradd -r -m -U -d /usr/local/tomcat -s /sbin/nologin tomcat
    
  5. 设置目录权限:
    chown -R tomcat:tomcat /usr/local/tomcat/
    
  6. 创建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
    
  7. 重新加载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

火山引擎 最新活动