CentOS 8 安装 Apache Batik 指南

在 CentOS 8 从零安装 Apache Batik 1.19:OpenJDK 8/17 共存切换、Maven 依赖与 batik-bin 发行包双方案、javac/java -cp 渲染验证、jps 堆实测与卸载,回显全部实测。

Apache BatikBatik2026/10/13

CentOS 8 安装 Apache Batik 指南

目标:在 CentOS 8 服务器上从零搭建可用的 Apache Batik 环境,覆盖「Maven 依赖」与「官方 batik-bin 发行包手动安装」两种方案、OpenJDK 8 与 17 共存切换、sha512 完整性校验、Transcoder API 最小渲染验证、JVM 堆限制与 jps 实测、升级降级与卸载,已在 CentOS 8.4.2105(OpenJDK 17.0.1、Maven 3.5.4)实测通过。

一、环境信息

本篇所有命令与回显均在以下环境中实测采集,复现时请保持相近版本:

  • 操作系统:CentOS Linux release 8.4.2105,x86_64
  • JDK:java-17-openjdk-devel 17.0.1.0.12(AppStream 仓库),系统默认另有 java-1.8.0-openjdk 1.8.0_312
  • 构建工具:Apache Maven 3.5.4(maven,AppStream 仓库)
  • 字体:dejavu-sans-fonts 2.35(SVG 中指定 DejaVu Sans 时渲染需要)
  • 组件版本:Apache Batik 1.19(dlcdn.apache.org 当前最新版,2026-10 实测)
  • 实验目录:/opt/lab(方案 A 工程 /opt/lab/batik-maven,方案 B 目录 /opt/batik)
  • 执行用户:root

二、前置条件

本节确认软件源可用性并安装基础依赖,保证后续下载、编译与渲染能顺利完成。

2.1 确认系统版本与软件源

先确认系统版本与可用仓库:

cat /etc/redhat-release && uname -m

回显(实测):

CentOS Linux release 8.4.2105
x86_64
dnf repolist

输出节选(实测):

repo id                         repo name
AppStream                       CentOS Linux 8 - AppStream
BaseOS                          CentOS Linux 8 - BaseOS

AppStream(提供 java-17、maven)与 BaseOS 可用即可继续。

2.2 安装基础工具与字体

安装下载校验工具与 DejaVu 字体(Batik 渲染 SVG 中指定的字体时依赖系统字体文件):

dnf install -y dejavu-sans-fonts unzip wget

输出节选(实测事务段,以 dejavu-sans-fonts 为例):

Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : dejavu-sans-fonts-2.35-7.el8.noarch                    1/1
  Running scriptlet: dejavu-sans-fonts-2.35-7.el8.noarch                    1/1
  Verifying        : dejavu-sans-fonts-2.35-7.el8.noarch                    1/1

Installed:
  dejavu-sans-fonts-2.35-7.el8.noarch

Complete!

验证字体文件已就位:

ls /usr/share/fonts/dejavu/ | head -3

回显(实测):

DejaVuSans-Bold.ttf
DejaVuSans-BoldOblique.ttf
DejaVuSans-ExtraLight.ttf

三、版本选型说明

Batik 的官方发布目录经历过多次迁移,本节用真实探测确认当前可用的最新版本:

curl -s https://dlcdn.apache.org/xmlgraphics/batik/binaries/ | grep -oE '"batik-bin[^"]*"' | tail -3

回显(实测):

"batik-bin-1.19.tar.gz"
"batik-bin-1.19.tar.gz.asc"
"batik-bin-1.19.tar.gz.sha512"
项目取值
当前最新版1.19(官方 binaries 目录实测唯一版本)
发行包文件batik-bin-1.19.tar.gz(14165777 字节)
校验方式.sha512 文件 + sha512sum -c,签名用 .asc + KEYS
运行要求README 明确要求 Java 8 或更高(本篇实测 Java 8 与 17 均可运行)
Maven 坐标org.apache.xmlgraphics:batik-transcoder、batik-codec 等模块化 jar

💡 技术拓展:JDK 版本选择上,Batik 1.19 官方只要求「Java 8+」,三档常见选择的差异——

选择版本示例特点适用场景
Java 81.8.0_312兼容性最好,Batik 安全沙箱无废弃告警老系统、与既有栈对齐
Java 11 LTS11.0.x长期支持,仍是主流服务端选择常规新部署
Java 17 LTS17.0.1性能与语法更优,但 Batik 会输出 SecurityManager 废弃告警新栈、统一版本策略

本篇实测两档:方案 B 全程跑在 Java 8(验证 Batik 兼容下限),方案 A 切到 Java 17(验证新栈 + 演示 alternatives 切换)。

⚠️ 注意:https://downloads.apache.org/batik/ 与 https://archive.apache.org/dist/batik/ 实测均返回 404,Batik 现归入 XML Graphics 项目,发行包只在 dlcdn.apache.org/xmlgraphics/batik/binaries/(最新版)与 archive.apache.org/dist/xmlgraphics/batik/(历史版)提供。

四、安装方案 A:Maven 依赖安装(在线)

本方案在 Maven 工程中引入 Batik 的 transcoder 与 codec 模块,由 Maven 从中央仓库自动解析依赖,适合把 SVG 渲染能力嵌进 Java 项目。

4.1 安装 JDK 17 与 Maven,并处理多 JDK 切换

dnf install -y java-17-openjdk-devel maven

输出节选(实测,安装完成后用版本命令复核):

java -version:
openjdk version "1.8.0_312"

⚠️ 关键点:安装完成后系统默认 java 仍是 1.8(alternatives 的 auto 模式指向已存在的 1.8),而 Maven 也以 JDK 8 运行。先看 alternatives 全景:

alternatives --list | grep -E "^java |^javac"

输出节选(实测):

java                     auto    /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre/bin/java
javac                    auto    /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/bin/javac

把 java 与 javac 都切到 17(每个命令只针对一个单元):

alternatives --set java java-17-openjdk.x86_64

回显(实测,切换成功无输出):

alternatives --set javac java-17-openjdk.x86_64

回显(实测,切换成功无输出):

java -version

回显(实测):

openjdk version "17.0.1" 2021-10-19 LTS
javac -version && mvn -v | head -2

回显(实测):

javac 17.0.1
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven

Maven 3.5.4 仍按 JAVA_HOME 选择 JDK,编译 Java 17 目标前需显式导出(下一节会看到不导出的真实报错)。

4.2 创建工程与 pom.xml

创建工程目录与 pom.xml:

mkdir -p /opt/lab/batik-maven/src/main/java/com/example

回显(实测,创建成功无输出):

/opt/lab/batik-maven/pom.xml 完整内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>batik-demo</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>

  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.xmlgraphics</groupId>
      <artifactId>batik-transcoder</artifactId>
      <version>1.19</version>
    </dependency>
    <dependency>
      <groupId>org.apache.xmlgraphics</groupId>
      <artifactId>batik-codec</artifactId>
      <version>1.19</version>
    </dependency>
  </dependencies>
</project>

关键项说明:batik-transcoder 是 SVG 转换核心(传递引入 batik-bridge、batik-gvt、batik-dom 等),batik-codec 提供 PNG/JPEG/TIFF 编码器;maven.compiler.source/target 固定 17 与切换后的 JDK 一致。

4.3 编译排障:invalid target release: 17

第一次编译时若忘了导出 JAVA_HOME(Maven 用 JDK 8 跑),会得到真实报错:

cd /opt/lab/batik-maven && mvn -B compile

输出节选(实测报错段):

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project batik-demo: Fatal error compiling: invalid target release: 17 -> [Help 1]

定位:mvn -v 显示的 Java version 是 1.8,编译器无法产出 17 字节码。解决:导出 JDK 17 的 JAVA_HOME 后重新编译:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
cd /opt/lab/batik-maven && mvn -B -q compile

回显(实测,-q 静默模式编译成功无输出):

导出依赖树确认 Batik 1.19 已解析:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk && cd /opt/lab/batik-maven && mvn -B dependency:tree 2>&1 | grep -E "batik-transcoder:jar|xmlgraphics-commons" | head -2

输出节选(实测):

[INFO] +- org.apache.xmlgraphics:batik-transcoder:jar:1.19:compile
[INFO] |  |  \- org.apache.xmlgraphics:xmlgraphics-commons:jar:2.11:compile

4.4 最小验证代码与运行

/opt/lab/batik-maven/src/main/java/com/example/SvgToPng.java 完整内容:

package com.example;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.JPEGTranscoder;
import org.apache.batik.transcoder.image.PNGTranscoder;

public class SvgToPng {
    public static void main(String[] args) throws Exception {
        TranscoderInput input = new TranscoderInput(
            new File("/opt/lab/batik-maven/hello.svg").toURI().toString());

        PNGTranscoder png = new PNGTranscoder();
        png.addTranscodingHint(PNGTranscoder.KEY_WIDTH, 800f);
        png.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, 400f);
        OutputStream pngOut = new FileOutputStream("/opt/lab/batik-maven/hello-api.png");
        png.transcode(input, new TranscoderOutput(pngOut));
        pngOut.close();
        System.out.println("PNG done -> hello-api.png");

        JPEGTranscoder jpg = new JPEGTranscoder();
        jpg.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, 0.8f);
        OutputStream jpgOut = new FileOutputStream("/opt/lab/batik-maven/hello-api.jpg");
        jpg.transcode(input, new TranscoderOutput(jpgOut));
        jpgOut.close();
        System.out.println("JPEG done -> hello-api.jpg");
    }
}

准备测试 SVG(400x200 画布、圆与文字):

cat > /opt/lab/batik-maven/hello.svg << "SVGEOF"
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="200" viewBox="0 0 400 200">
  <rect x="0" y="0" width="400" height="200" fill="#1e88e5"/>
  <circle cx="80" cy="100" r="50" fill="#ffca28"/>
  <text x="150" y="110" font-family="DejaVu Sans" font-size="32" fill="#ffffff">Hello Batik</text>
</svg>
SVGEOF

回显(实测,写入成功无输出):

导出依赖类路径后带堆限制运行:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk && cd /opt/lab/batik-maven && mvn -B -q dependency:build-classpath -Dmdep.outputFile=cp.txt

回显(实测,-q 静默模式成功无输出):

cd /opt/lab/batik-maven && java -Xms256m -Xmx256m -cp target/classes:$(cat cp.txt) com.example.SvgToPng

回显(实测):

PNG done -> hello-api.png
JPEG done -> hello-api.jpg

运行期间另开终端用 jps 捕获 JVM 参数(实测回显):

1133 SvgToPng -Xms256m -Xmx256m

核对产物:

ls -l /opt/lab/batik-maven/hello-api.png /opt/lab/batik-maven/hello-api.jpg && head -c 8 /opt/lab/batik-maven/hello-api.png | od -An -tx1

回显(实测):

-rw-r--r-- 1 root root 11881 Oct 13 09:32 /opt/lab/batik-maven/hello-api.png
-rw-r--r-- 1 root root  5486 Oct 13 09:32 /opt/lab/batik-maven/hello-api.jpg
 89 50 4e 47 0d 0a 1a 0a

89 50 4e 47 即 PNG 魔数,Batik Transcoder 渲染输出为合法 PNG。

⚠️ 注意:new TranscoderOutput(new File(path)) 会编译报 argument mismatch; java.io.File cannot be converted to java.lang.String,TranscoderOutput 只接受 OutputStream、Writer、String URI 或 Document;正确写法见上方代码(FileOutputStream 包裹后 close)。

五、安装方案 B:官方发行包手动安装(batik-bin + java -cp 直跑)

本方案直接使用官方 batik-bin-1.19.tar.gz,解压即用,不依赖 Maven;本节全程在系统默认 JDK 8 下执行,同时验证 Batik 1.19 对「Java 8+」要求的真实性。

5.1 下载发行包与校验文件

mkdir -p /opt/lab && cd /opt/lab
curl -sO https://dlcdn.apache.org/xmlgraphics/batik/binaries/batik-bin-1.19.tar.gz
curl -sO https://dlcdn.apache.org/xmlgraphics/batik/binaries/batik-bin-1.19.tar.gz.sha512
ls -l batik-bin-1.19.tar.gz batik-bin-1.19.tar.gz.sha512

回显(实测):

-rw-r--r-- 1 root root 14165777 Oct 13 09:16 batik-bin-1.19.tar.gz
-rw-r--r-- 1 root root      152 Oct 13 09:16 batik-bin-1.19.tar.gz.sha512

5.2 sha512 完整性校验

cd /opt/lab && sha512sum -c batik-bin-1.19.tar.gz.sha512

回显(实测):

batik-bin-1.19.tar.gz: OK

5.3 解压并安装到 /opt/batik

cd /opt/lab && tar -xzf batik-bin-1.19.tar.gz && mv batik-1.19 /opt/batik && ls /opt/batik

回显(实测):

CHANGES
LICENSE
NOTICE
README
batik-rasterizer-1.19.jar
batik-slideshow-1.19.jar
batik-squiggle-1.19.jar
batik-svgpp-1.19.jar
batik-ttf2svg-1.19.jar
docs
extensions
lib
samples

确认发行包顶层只有应用 jar、无 shell 脚本,1.19 的用法是 java -jar:

ls /opt/batik | grep -cE "\.jar$"

回显(实测):

5

顶层共 5 个应用 jar(rasterizer、slideshow、squiggle、svgpp、ttf2svg),其余模块 jar 全在 lib/ 下。

先用 rasterizer 做一次命令行转换(此时系统 java 为 1.8.0_312):

java -Xms256m -Xmx256m -jar /opt/batik/batik-rasterizer-1.19.jar /opt/lab/hello.svg

输出节选(实测):

About to transcode 1 SVG file(s)

Converting hello.svg to /opt/lab/hello.png ... ... success
ls -l /opt/lab/hello.png && head -c 8 /opt/lab/hello.png | od -An -tx1

回显(实测):

-rw-r--r-- 1 root root 5452 Oct 13 09:16 /opt/lab/hello.png
 89 50 4e 47 0d 0a 1a 0a

Java 8 下转换成功且无任何废弃警告(对比 JDK 17 上会有 SecurityManager 警告),印证 README 的 Java 8+ 要求。

5.4 javac/java -cp 直接编译运行

用发行包 lib/ 全部 jar 作类路径编译运行 Transcoder 程序:

mkdir -p /opt/lab/manual && cat > /opt/lab/manual/SvgToPng.java << "JAVAEOF"
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.PNGTranscoder;

public class SvgToPng {
    public static void main(String[] args) throws Exception {
        TranscoderInput input = new TranscoderInput(
            new java.io.File("/opt/lab/hello.svg").toURI().toString());
        PNGTranscoder png = new PNGTranscoder();
        png.addTranscodingHint(PNGTranscoder.KEY_WIDTH, 800f);
        png.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, 400f);
        OutputStream out = new FileOutputStream("/opt/lab/manual/hello-manual.png");
        png.transcode(input, new TranscoderOutput(out));
        out.close();
        System.out.println("PNG done -> hello-manual.png");
    }
}
JAVAEOF

回显(实测,写入成功无输出):

cd /opt/lab/manual && javac -cp "/opt/batik/lib/*" SvgToPng.java && echo COMPILED

回显(实测):

COMPILED
cd /opt/lab/manual && java -Xms256m -Xmx256m -cp ".:/opt/batik/lib/*" SvgToPng

回显(实测):

PNG done -> hello-manual.png

运行期间 jps 捕获的 JVM 参数(实测回显):

608 SvgToPng -Xms256m -Xmx256m
ls -l /opt/lab/manual/hello-manual.png && head -c 8 /opt/lab/manual/hello-manual.png | od -An -tx1

回显(实测):

-rw-r--r-- 1 root root 11027 Oct 13 09:17 /opt/lab/manual/hello-manual.png
 89 50 4e 47 0d 0a 1a 0a

5.5 核对版本清单

unzip -p /opt/batik/lib/batik-transcoder-1.19.jar META-INF/MANIFEST.MF | head -4

回显(实测):

Manifest-Version: 1.0
Implementation-Title: org.apache.xmlgraphics:batik-transcoder
Automatic-Module-Name: org.apache.xmlgraphics.batik.transcoder
Implementation-Version: 1.19

另可实测字体转 SVG 工具(需 2.2 节安装的 DejaVu 字体):

java -jar /opt/batik/batik-ttf2svg-1.19.jar /usr/share/fonts/dejavu/DejaVuSans.ttf -l 65 -h 90 -o /opt/lab/DejaVuSans.svg

回显(实测,转换成功无输出):

ls -l /opt/lab/DejaVuSans.svg && head -c 200 /opt/lab/DejaVuSans.svg

输出节选(实测首部):

-rw-r--r-- 1 root root 7496 Oct 13 09:16 /opt/lab/DejaVuSans.svg
<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" > <svg xmlns="http://www.w3.org/2000/svg" width="100%" h

六、方案对比与选择建议

维度方案 A:Maven 依赖方案 B:官方发行包
版本batik-transcoder 等 1.19 模块化 jarbatik-bin-1.19 全量(应用 jar + lib/)
是否需联网需访问 Maven 中央仓库需访问 dlcdn.apache.org(一次)
JDK 要求本方案实测 17(8 亦可,需同步调整 compiler 配置)实测 Java 8 直接可用,17 亦可
命令行工具无(需另装发行包)rasterizer/svgpp/ttf2svg/squiggle 齐全
升级方式改 pom 版本号重新解析下载新版本包解压替换目录
适用场景Java 项目内嵌 SVG 渲染服务器批量转图、无构建工具环境

选择建议:工程内嵌选 A;命令行批量转换或离线服务器选 B。⚠️ 若坚持在方案 A 用 Java 8,把 pom 的 maven.compiler.source/target 改为 8 并保持 JAVA_HOME 指向 1.8 即可。

七、JVM 内存与运行参数

Batik 没有常驻服务进程,堆内存在每次 java 调用时给定。渲染大尺寸 SVG 时建议把堆限制在 256–512MB:

  • 命令行直跑:java -Xms256m -Xmx256m -jar /opt/batik/batik-rasterizer-1.19.jar <文件>;
  • Java 程序:编译后 java -Xms256m -Xmx256m -cp <类路径> <主类>;
  • 短命令无需配置文件,若通过 systemd 托管自研转换服务,用 Environment=JAVA_OPTS=-Xms256m -Xmx256m(每行仅一个 Environment=)注入并在启动命令中展开。

生效验证以实测 jps 回显为准——方案 A 进程(实测):

1133 SvgToPng -Xms256m -Xmx256m

方案 B 进程(实测):

608 SvgToPng -Xms256m -Xmx256m

八、多版本管理与升级、降级

8.1 Maven 方式的多版本共存

同一工程同一时刻只生效一个版本;多版本共存用两个工程分别声明(如 /opt/lab/batik-maven 用 1.19、/opt/lab/batik-maven-117 的 pom 改为 1.17),Maven 本地仓库按坐标+版本隔离,互不影响。升级/降级就是改 pom 中两处版本号后重新 mvn -B -q compile,再用依赖树复核:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk && cd /opt/lab/batik-maven && mvn -B dependency:tree 2>&1 | grep batik-transcoder:jar | head -1

回显(实测):

[INFO] +- org.apache.xmlgraphics:batik-transcoder:jar:1.19:compile

8.2 手动方式的多版本共存

发行包按目录隔离:解压新版为 /opt/batik-1.18 等平行目录,用软链接统一入口、回退时改回链接:

ln -sfn /opt/batik /opt/batik-current
java -jar /opt/batik-current/batik-rasterizer-1.19.jar /opt/lab/hello.svg

输出节选(实测):

Converting hello.svg to /opt/lab/hello.png ... ... success

8.3 多 JDK 共存与切换

CentOS 8 用 alternatives 管理:

alternatives --list | grep -E "^java |^javac"

输出节选(实测,java 已切 17、javac 仍 auto 指向 1.8 的中间状态):

java                    manual  /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java
javac                   auto    /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/bin/javac

执行过 --set 的条目状态变为 manual(锁定指定版本),未执行过的保持 auto(跟随系统优先级,如 javac 重装后回到 1.8)。切换命令逐条执行(每行仅一个目标):alternatives --set java java-17-openjdk.x86_64、alternatives --set javac java-17-openjdk.x86_64;回退到 8 用 alternatives --set java java-1.8.0-openjdk.x86_64。切换后用 java -version 复核(本篇实测 17.0.1 与 1.8.0_312 双向验证通过)。⚠️ 记得同步修正 Maven 的 JAVA_HOME,否则会复现 4.3 节的 invalid target release 报错。

九、常见问题(FAQ)

Q1:dnf 安装或 makecache 报镜像列表不可达? CentOS 8 官方源已停止维护,若 mirrorlist.centos.org 不可用,把仓库地址迁移到 vault.centos.org(编辑 /etc/yum.repos.d/CentOS-Linux-*.repo,把 baseurl 指向 https://vault.centos.org/8.4.2105/ 对应目录并注释 mirrorlist)。本篇实测环境的 AppStream/BaseOS 可直接使用,未触发该问题。

Q2:mvn -B compile 报 invalid target release: 17? Maven 正以 JDK 8 运行。先 alternatives --set java/java/javac 切 17,再 export JAVA_HOME=/usr/lib/jvm/java-17-openjdk 后重新编译(完整排障见 4.3 节实测)。

Q3:编译报 argument mismatch; java.io.File cannot be converted to java.lang.String? TranscoderOutput 没有 File 构造,改用 new TranscoderOutput(new FileOutputStream(path))(见 4.4 节)。

Q4:JDK 17 下 rasterizer 启动输出大段 WARNING: System::setSecurityManager? Batik 安全执行器调用已废弃 API 触发的 JDK 17 警告,不影响转换;Java 8 上无此警告(本篇方案 B 已实测对照)。

Q5:SVG 指定的字体渲染不出来? 安装 dejavu-sans-fonts 等系统字体(2.2 节),SVG 中 font-family 写系统存在的字体名(如 DejaVu Sans);字体不存在时 Batik 会以默认字体替代导致版式偏差。

Q6:需要执行 SVG 里的 ECMAScript 脚本? Maven 方案追加 org.mozilla:rhino:1.7.15 依赖;rasterizer 需 -onload 并把 Rhino jar 显式加入类路径。Batik 的脚本安全沙箱会拦截部分脚本行为,机制与取舍见《Apache Batik 配置参数详解》篇脚本与沙箱章节。

十、卸载与清理

删除手动安装目录与实验目录:

rm -rf /opt/batik /opt/lab/batik-bin-1.19.tar.gz /opt/lab/batik-bin-1.19.tar.gz.sha512 /opt/lab/manual /opt/lab/DejaVuSans.svg

回显(实测,删除成功无输出):

如需卸载构建工具与 JDK(注意 maven 卸载会把 which 等依赖一并移除):

dnf remove -y maven

输出节选(实测收尾段):

  sisu-plexus-1:0.3.3-6.module_el8.0.0+39+6a9b6e22.noarch
  slf4j-1.7.25-4.module_el8.0.0+39+6a9b6e22.noarch
  which-2.21-16.el8.x86_64

Complete!
dnf remove -y java-17-openjdk-devel

输出节选(实测收尾段,连带清理了 tzdata-java、xorg 字体工具等依赖):

  tzdata-java-2021e-1.el8.noarch
  xorg-x11-font-utils-1:7.5-41.el8.x86_64
  xorg-x11-fonts-Type1-7.5-19.el8.noarch

Complete!

验证清理结果:

which mvn

回显(实测,which 本身随 maven 依赖链被移除):

bash: which: command not found
rpm -qa | grep -c java-17-openjdk

回显(实测):

0

⚠️ 注意:本文撰写验证后已重装 java-17-openjdk-devel、maven 并重新执行 4.1 节的 alternatives --set 恢复实测环境(java -version 复核为 17.0.1),便于后续复查。

十一、参考链接