Ubuntu 22.04 安装 Apache Batik 指南
在 Ubuntu 22.04 从零安装 Apache Batik 1.19:JDK 17 与 Maven 环境、Maven 依赖与发行包双方案、Transcoder 渲染验证、jps 堆实测、多版本管理与卸载,回显全部实测。
Ubuntu 22.04 安装 Apache Batik 指南
目标:在 Ubuntu 22.04 服务器上从零搭建可用的 Apache Batik 环境,覆盖「Maven 依赖」与「官方 batik-bin 发行包手动安装」两种方案、sha512 完整性校验、Transcoder API 最小渲染验证、JVM 堆内存限制与 jps 实测、多版本管理与卸载,已在 Ubuntu 22.04(OpenJDK 17、Maven 3.6.3)实测通过。
一、环境信息
本篇所有命令与回显均在以下环境中实测采集,复现时请保持相近版本:
- 操作系统:Ubuntu 22.04.5 LTS(jammy),x86_64
- JDK:OpenJDK 17.0.20.1(
openjdk-17-jdk-headless,apt 官方仓库) - 构建工具:Apache Maven 3.6.3(
maven,apt 官方仓库) - 组件版本:Apache Batik 1.19(dlcdn.apache.org 当前最新版,2026-10 实测)
- 实验目录:
/opt/lab(方案 A 工程/opt/lab/batik-maven,方案 B 目录/opt/batik) - 执行用户:root
二、前置条件
本节确认系统版本、网络可达性与基础工具,保证后续下载与依赖解析能顺利完成。
2.1 确认系统与网络
先确认操作系统版本与架构,再确认能访问 Apache 官方下载站与 Maven 中央仓库:
cat /etc/os-release | head -2
回显(实测):
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
uname -m
回显(实测):
x86_64
curl -sI https://dlcdn.apache.org/xmlgraphics/batik/binaries/ | head -2
回显(实测):
HTTP/2 200
server: Apache
系统为 64 位且官方下载站可达,可以继续安装。
2.2 安装基础工具
安装 curl、wget 与 unzip,用于下载发行包与校验:
apt-get update -qq
回显(实测,-qq 静默模式成功无输出):
DEBIAN_FRONTEND=noninteractive apt-get install -y curl wget unzip
输出节选(实测,安装完成段):
Setting up unzip (6.0-26ubuntu3.1) ...
Processing triggers for man-db (2.10.2-1) ...
验证工具已就位:
wget --version | head -1
回显(实测):
GNU Wget 1.21.2 built on linux-gnu.
三、版本选型说明
Batik 的官方发布目录经历过多次迁移,本节先用真实探测确认当前可用的最新版本,避免写到失效路径:
curl -s https://dlcdn.apache.org/xmlgraphics/batik/binaries/ | grep -oE '"batik-bin[^"]*"' | tail -6
回显(实测):
"batik-bin-1.19.tar.gz"
"batik-bin-1.19.tar.gz.asc"
"batik-bin-1.19.tar.gz.sha512"
"batik-bin-1.19.zip"
"batik-bin-1.19.zip.asc"
"batik-bin-1.19.zip.sha512"
| 项目 | 取值 |
|---|---|
| 当前最新版 | 1.19(官方 binaries 目录实测唯一版本) |
| 发行包文件 | batik-bin-1.19.tar.gz(14165777 字节)/ batik-bin-1.19.zip |
| 校验方式 | .sha512 文件 + sha512sum -c,签名用 .asc + KEYS |
| 运行要求 | README 明确要求 Java 8 或更高版本(本篇用 OpenJDK 17) |
| Maven 坐标 | org.apache.xmlgraphics:batik-transcoder、batik-codec 等模块化 jar |
💡 技术拓展:Batik 采用「模块化 jar + 聚合 jar」两种分发形态,选型对比——
形态 代表产物 特点 适用场景 模块 jar batik-transcoder / batik-codec / batik-svggen 等 按需依赖,体积小 Maven 工程只想做 SVG 转图 聚合 jar batik-all-1.19.jar(lib/ 目录内) 单 jar 含全部模块 javac/java -cp 手动类路径 应用 jar batik-rasterizer-1.19.jar 等顶层 jar 可执行,配 lib/ 使用 直接命令行转换 本篇两种方案分别对应「Maven 模块 jar」与「官方发行包(应用 jar + lib/ 模块 jar)」。
⚠️ 注意:
https://downloads.apache.org/batik/与https://archive.apache.org/dist/batik/实测均返回 404,Batik 现归入 XML Graphics 项目,发行包只在dlcdn.apache.org/xmlgraphics/batik/(最新版)与archive.apache.org/dist/xmlgraphics/batik/(历史版)提供,请勿再使用旧路径。
四、安装方案 A:Maven 依赖安装(在线,推荐)
本方案在 Maven 工程中引入 Batik 的 transcoder 与 codec 模块,由 Maven 从中央仓库自动解析全部依赖,适合把 SVG 渲染能力嵌进 Java 项目的场景。
4.1 安装 JDK 17 与 Maven
Batik 1.19 只要求 Java 8+,Ubuntu 22.04 官方仓库的 OpenJDK 17 与 Maven 3.6.3 即可满足:
DEBIAN_FRONTEND=noninteractive apt-get install -y openjdk-17-jdk-headless maven
输出节选(实测安装完成段):
Setting up openjdk-17-jdk-headless:amd64 (17.0.20.1+1-1~22.04) ...
Setting up maven (3.6.3-5) ...
update-alternatives: using /usr/share/maven/bin/mvn to provide /usr/bin/mvn (mvn) in auto mode
分别验证 Java 与 Maven 版本:
java -version
回显(实测):
openjdk version "17.0.20.1" 2026-08-18
OpenJDK Runtime Environment (build 17.0.20.1+1-1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 17.0.20.1+1-1-22.04-Ubuntu, mixed mode, sharing)
javac -version && mvn -v | head -2
回显(实测):
javac 17.0.20.1
Apache Maven 3.6.3
Maven home: /usr/share/maven
4.2 创建工程与 pom.xml
创建工程目录并写入 pom.xml,引入 batik-transcoder(SVG 转换核心)与 batik-codec(PNG/JPEG/TIFF 编码器):
mkdir -p /opt/lab/batik-maven/src/main/java/com/example
回显(实测,mkdir 成功无输出):
/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 编译并解析依赖
先编译一次让 Maven 拉齐依赖,再导出依赖树确认 Batik 1.19 已就位:
cd /opt/lab/batik-maven && mvn -B -q compile
回显(实测,-q 静默模式编译成功无输出):
cd /opt/lab/batik-maven && mvn -B dependency:tree 2>&1 | grep -E "org.apache.xmlgraphics:batik-transcoder|xmlgraphics-commons|batik-codec" | head -3
输出节选(实测):
[INFO] +- org.apache.xmlgraphics:batik-transcoder:jar:1.19:compile
[INFO] | +- org.apache.xmlgraphics:batik-awt-util:jar:1.19:compile
[INFO] | | \- org.apache.xmlgraphics:xmlgraphics-commons:jar:2.11:compile
依赖树显示 batik-transcoder:1.19 及其传递依赖 xmlgraphics-commons:2.11 均已解析,说明中央仓库路径正常。
4.4 最小验证代码:SVG 渲染为 PNG 与 JPEG
写入最小可运行程序,用 PNGTranscoder 与 JPEGTranscoder 把一份 SVG 分别渲染为 PNG 与 JPEG,同时限制堆内存 256MB:
/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
回显(实测,写入成功无输出):
编译并导出依赖类路径,然后带堆限制运行(用 jps 抓取实际生效的 JVM 堆参数):
cd /opt/lab/batik-maven && mvn -B -q dependency:build-classpath -Dmdep.outputFile=cp.txt
回显(实测,-q 静默模式成功无输出,依赖路径已写入 cp.txt):
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 参数(实测回显):
6170 SvgToPng -Xms256m -Xmx256m
jps -v 显示进程确实以 -Xms256m -Xmx256m 运行,堆限制生效。核对产物为合法 PNG:
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:01 /opt/lab/batik-maven/hello-api.png
-rw-r--r-- 1 root root 5486 Oct 13 09:01 /opt/lab/batik-maven/hello-api.jpg
89 50 4e 47 0d 0a 1a 0a
89 50 4e 47 即 PNG 文件魔数,说明 Batik Transcoder 渲染出的确实是合法 PNG 文件。
💡 技术拓展:Batik 光栅化可选输出格式不止 PNG/JPEG——
格式 MIME 类型 特点 适用场景 PNG image/png 无损、支持透明通道 网页图、图标、需透明背景 JPEG image/jpeg 有损、体积小、无透明 照片类大图、带宽敏感 TIFF image/tiff 支持多页与高色深 印刷、归档 application/pdf 需另加 FOP pdf-transcoder 依赖 矢量文档输出 本文验证实际采用 PNG(透明无损)与 JPEG(quality=0.8)两种,均为 batik-codec 内置支持、开箱即用。
⚠️ 注意:初写示例时常见一个真实编译错误——
new TranscoderOutput(new File(path))会报argument mismatch; java.io.File cannot be converted to java.lang.String,因为 TranscoderOutput 的构造只接受 OutputStream、Writer、String 形式的 URI 或 Document,不接受 File。正确做法如本节代码:先new FileOutputStream(path)再包进 TranscoderOutput,用完关闭流。
五、安装方案 B:官方发行包手动安装(batik-bin + java -cp 直跑)
本方案直接使用 Apache 官方 batik-bin-1.19.tar.gz 发行包,解压即用,不依赖 Maven,适合服务器上快速获得命令行工具与全部模块 jar。
5.1 下载发行包与校验文件
从官方 binaries 目录下载 tar.gz 与配套 sha512 校验文件:
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 08:52 batik-bin-1.19.tar.gz
-rw-r--r-- 1 root root 152 Oct 13 08:52 batik-bin-1.19.tar.gz.sha512
5.2 sha512 完整性校验
查看校验文件内容并用 sha512sum 校验:
cat /opt/lab/batik-bin-1.19.tar.gz.sha512
回显(实测):
d0896290cfb34500b76afecdbe31630ea26afbd68a00edb672430d0a0e22d9f2285bc6cd37c9656a69af2e1e86239dcf671ae0d7f0c287605bf3385fc612a592 batik-bin-1.19.tar.gz
cd /opt/lab && sha512sum -c batik-bin-1.19.tar.gz.sha512
回显(实测):
batik-bin-1.19.tar.gz: OK
校验通过,说明下载内容与官方发布一致,可以放心解压。
5.3 解压并安装到 /opt/batik
先看一眼发行包结构(注意 1.19 顶层只有应用 jar,没有 shell 启动脚本):
cd /opt/lab && tar -tzf batik-bin-1.19.tar.gz | head -16
输出节选(实测首部):
batik-1.19/CHANGES
batik-1.19/LICENSE
batik-1.19/NOTICE
batik-1.19/README
batik-1.19/docs/
batik-1.19/extensions/
batik-1.19/batik-rasterizer-1.19.jar
batik-1.19/batik-slideshow-1.19.jar
batik-1.19/batik-squiggle-1.19.jar
batik-1.19/batik-svgpp-1.19.jar
batik-1.19/batik-ttf2svg-1.19.jar
batik-1.19/extensions/batik-rasterizer-ext-1.19.jar
batik-1.19/extensions/batik-squiggle-ext-1.19.jar
batik-1.19/lib/batik-all-1.19.jar
batik-1.19/lib/batik-anim-1.19.jar
batik-1.19/lib/batik-bridge-1.19.jar
cd /opt/lab && tar -tzf batik-bin-1.19.tar.gz | wc -l
回显(实测):
582
解压并移动到 /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
阅读 README 确认运行要求:
grep -A2 "Requirements" /opt/batik/README | head -4
输出节选(实测):
Requirements
------------
o A Java 8 or later compatible virtual machine for your operating system.
发行包确认只需要 Java 8 及以上,本机 JDK 17 满足。
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
运行(同样限制堆 256MB,运行期间用 jps 捕获参数):
cd /opt/lab/manual && java -Xms256m -Xmx256m -cp ".:/opt/batik/lib/*" SvgToPng
回显(实测):
PNG done -> hello-manual.png
jps 捕获的进程参数(实测回显):
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 核对 jar 内容与版本清单
用 jar 命令确认模块 jar 内自带的版本信息:
unzip -p /opt/batik/lib/batik-transcoder-1.19.jar META-INF/MANIFEST.MF | head -6
回显(实测):
Manifest-Version: 1.0
Implementation-Title: org.apache.xmlgraphics:batik-transcoder
Automatic-Module-Name: org.apache.xmlgraphics.batik.transcoder
Implementation-Version: 1.19
Built-By: simon
Implementation-Vendor-Id: org.apache.xmlgraphics
unzip -p /opt/batik/batik-rasterizer-1.19.jar META-INF/MANIFEST.MF | grep -o "lib/[a-zA-Z0-9.-]*jar" | wc -l
回显(实测):
16
unzip -p /opt/batik/batik-rasterizer-1.19.jar META-INF/MANIFEST.MF | grep -o "lib/[a-zA-Z0-9.-]*jar" | head -4
输出节选(实测首部):
lib/batik-shared-resources-1.19.jar
lib/batik-parser-1.19.jar
lib/batik-awt-util-1.19.jar
lib/commons-io-2.17.0.jar
rasterizer 应用 jar 的 Class-Path 显式引用了 16 个 lib/ 下 jar(含 xmlgraphics-commons、commons-io 等第三方依赖,不含通配符、也不含 Rhino 脚本引擎 jar),版本清单确认为 1.19。
六、方案对比与选择建议
两种方案都能得到完整可用的 Batik 环境,关键差异如下:
| 维度 | 方案 A:Maven 依赖 | 方案 B:官方发行包 |
|---|---|---|
| 版本 | batik-transcoder 等 1.19 模块化 jar | batik-bin-1.19 全量(应用 jar + lib/) |
| 是否需联网 | 需访问 Maven 中央仓库 | 需访问 dlcdn.apache.org(一次) |
| 安装方式 | pom.xml 声明 + mvn 自动解析 | tar 解压到 /opt/batik |
| 命令行工具 | 无(需自己写调用类或另装发行包) | rasterizer/svgpp/ttf2svg/squiggle 齐全 |
| 升级方式 | 改 pom 版本号重新解析 | 下载新版本包解压替换目录 |
| 适用场景 | Java 项目内嵌 SVG 渲染 | 服务器批量转图、无构建工具环境 |
选择建议:要在自己工程里调 API 选方案 A;要拿命令行工具直接转图、或在离线服务器上快速部署选方案 B。两者可并存(本篇即同时装好)。
七、JVM 内存与运行参数
Batik 是库与命令行工具集合,没有常驻服务进程,JVM 堆在每次 java 调用时给定。渲染大尺寸 SVG 时建议显式限制堆在 256–512MB 区间,避免吃满整机内存:
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
验证堆参数确实生效——用一个稍长驻的图形工具进程配合 jps 检查(以 squiggle 为例,需图形显示环境):
DISPLAY=:99 java -Xms256m -Xmx256m -jar /opt/batik/batik-squiggle-1.19.jar &
jps -v
回显(实测):
5782 batik-squiggle-1.19.jar -Xms256m -Xmx256m
Maven 方案同理,java -Xms256m -Xmx256m -cp target/classes:$(cat cp.txt) com.example.SvgToPng 运行期 jps 捕获到(实测):
6170 SvgToPng -Xms256m -Xmx256m
⚠️ 注意:Batik 1.19 在 JDK 17 上每次启动会输出 4 行
WARNING: System::setSecurityManager has been called by org.apache.batik.util.ApplicationSecurityEnforcer提示,这是 JDK 17 对已废弃 API 的标准警告,不影响转换结果(本文所有实测回显均含此警告,已逐条注明剔除方式grep -vE "^WARNING");在 Java 8 上无该警告。
八、多版本管理与升级、降级
8.1 Maven 方式的多版本共存
在同一工程里只能生效一个版本,多版本共存靠两个工程分别声明。例如再建 /opt/lab/batik-maven-117,把 pom 中两处 1.19 改为 1.17 后 mvn -B -q compile,Maven 会把 1.17 解析到该工程专属的本地仓库路径下,两工程互不影响。
升级或降级只需改 pom 版本号后重新编译:
cd /opt/lab/batik-maven && mvn -B -q dependency:tree 2>&1 | grep batik-transcoder | head -1
回显(实测):
[INFO] +- org.apache.xmlgraphics:batik-transcoder:jar:1.19:compile
8.2 手动方式的多版本共存
发行包按目录隔离版本:把新版本解压为 /opt/batik-1.18、/opt/batik-1.19 等平行目录,用哪个版本就调用哪个目录里的 jar;再用软链接统一入口:
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 共存与切换
Ubuntu 的 update-alternatives 管理 JDK 共存:
update-alternatives --list java
回显(实测):
/usr/lib/jvm/java-17-openjdk-amd64/bin/java
本机只有一个 JDK;若另装 openjdk-11-jdk-headless,update-alternatives --list java 会同时列出 11 与 17,用 update-alternatives --config java 按序号交互切换,或 update-alternatives --set java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 直接指定,切换后用 java -version 复核即可。
九、常见问题(FAQ)
Q1:下载 404,downloads.apache.org/batik/ 打不开怎么办?
Batik 发行目录已迁移。实测 downloads.apache.org/batik/、archive.apache.org/dist/batik/、archive.apache.org/dist/xml/batik/(只有 1.0~1.6 旧包)均非当前入口。正确地址是 https://dlcdn.apache.org/xmlgraphics/batik/binaries/(最新版)与 https://archive.apache.org/dist/xmlgraphics/batik/(历史版本)。
Q2:编译报 argument mismatch; java.io.File cannot be converted to java.lang.String?
TranscoderOutput 没有 File 构造。改为 new TranscoderOutput(new FileOutputStream(path)),输出后 close 流(见 4.4 节完整代码与说明)。
Q3:Maven 编译通过但运行报找不到图像编码器?
只依赖 batik-transcoder 不够,需同时引入 batik-codec(PNG/JPEG/TIFF 编码实现),见 4.2 节 pom.xml。
Q4:JDK 17 下启动工具出现 WARNING: System::setSecurityManager 大段警告?
是 Batik 安全执行器调用已废弃 API 触发的 JDK 警告,转换功能不受影响;Java 8 上无此警告。确认无影响后再看转换是否 success。
Q5:需要 SVG 里写 ECMAScript 脚本并执行怎么办?
Maven 方案追加 org.mozilla:rhino:1.7.15 依赖即可让 batik-script 模块可用;命令行 rasterizer 需要执行脚本时加 -onload 并把 Rhino jar 放进类路径(java -cp "rhino-1.7.15.jar:batik-rasterizer-1.19.jar:lib/*" org.apache.batik.apps.rasterizer.Main)。注意 Batik 自带安全沙箱会拦截脚本的部分系统属性读取,相关机制与取舍见《Apache Batik 配置参数详解》篇的脚本与沙箱章节。
Q6:无图形界面的服务器能跑 squiggle 吗?
直接跑会报 java.awt.HeadlessException: No X11 DISPLAY variable was set(实测回显见《Apache Batik 常用 CLI 命令与工具详解》篇)。服务器场景改用 rasterizer 完成转换,squiggle 仅在有 X 环境的桌面机上使用。
十、卸载与清理
删除手动安装目录与实验目录即可完成卸载:
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/hello.svg
回显(实测,删除成功无输出):
如不再需要 Maven 环境与 JDK,一并卸载:
DEBIAN_FRONTEND=noninteractive apt-get remove -y maven openjdk-17-jdk-headless
输出节选(实测收尾段):
After this operation, 79.0 MB disk space will be freed.
(Reading database ... 24262 files and directories currently installed.)
Removing maven (3.6.3-5) ...
Removing openjdk-17-jdk-headless:amd64 (17.0.20.1+1-1~22.04) ...
验证卸载结果:
which java mvn
回显(实测):
/usr/bin/java
只剩 /usr/bin/java(headless JRE 作为依赖仍在),mvn 已移除;如需连 JRE 一并清理,再执行 apt-get autoremove -y。本文撰写验证后已重装 maven 与 openjdk-17-jdk-headless 恢复环境。
十一、参考链接
- Apache Batik 官方站点:https://xmlgraphics.apache.org/batik/
- 官方发行包目录(最新版):https://dlcdn.apache.org/xmlgraphics/batik/binaries/
- 历史版本归档:https://archive.apache.org/dist/xmlgraphics/batik/
- Maven 中央仓库 batik-transcoder:https://central.sonatype.com/artifact/org.apache.xmlgraphics/batik-transcoder
- 官方 Transcoder API 文档:https://xmlgraphics.apache.org/batik/using/transcoder.html
- 官方 Rasterizer 文档:https://xmlgraphics.apache.org/batik/tools/rasterizer.html