CentOS 8 安装 Apache Props Ant Library 指南

在 CentOS 8 上修复 EOL 软件源并安装验证 Apache Props Ant Library(ant-props 1.0.0)的完整指南,含 JAVA_HOME 显式配置等 el8 实测避坑要点。

Apache Props Ant LibraryApache Props Ant Library2026/10/15

CentOS 8 安装 Apache Props Ant Library 指南

目标:在 CentOS 8 上修复已停止维护的软件源,安装 JDK 17、Ant 与 Maven,并完成 Apache Props Ant Library(构件 org.apache.ant:ant-props:1.0.0)的安装与运行验证(实测通过)。

一、环境信息

本文所有命令与回显均在以下环境实测采集:

项目值
操作系统CentOS Linux 8(x86_64),软件源已切换到阿里云归档 mirrors.aliyun.com/centos-vault/8.5.2111
JDKjava-17-openjdk-devel 17.0.1.0.12(el8_5);另有 ant 依赖带入的 java-1.8.0-openjdk 1.8.0_312
AntApache Ant 1.10.5(el8 AppStream,模块化打包)
MavenApache Maven 3.5.4(el8 AppStream)
Props Ant Libraryorg.apache.ant:ant-props:1.0.0(jar 33260 字节,SHA-1 da89e11da0ab59ce1b1ea5e79a220f98a73c5792)
实验目录/opt/props-antlib(构件仓库)、/root/props-demo(独立 Ant 工程)、/root/props-maven-demo(Maven 工程)

CentOS 8 已于 2021 年底停止维护,镜像源 mirror.centos.org 与 vault.centos.org 对部分请求返回 403,这是本文环境的第一道坎,第二节用阿里云归档源解决。ant-props 版本谱系实测查询如下:

$ curl -s --max-time 30 https://repo1.maven.org/maven2/org/apache/ant/ant-props/maven-metadata.xml
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>org.apache.ant</groupId>
  <artifactId>ant-props</artifactId>
  <versioning>
    <latest>1.0.0</latest>
    <release>1.0.0</release>
    <versions>
      <version>1.0.0</version>
    </versions>
    <lastUpdated>20260627124331</lastUpdated>
  </versioning>
</metadata>

唯一版本 1.0.0,运行时要求 Ant 1.8.0 及以上。

二、前置条件

  1. 具备 root 权限,dnf 可用。
  2. 可访问 mirrors.aliyun.com 与 repo1.maven.org。
  3. 软件源可用性验证:CentOS 8 的官方源已失效,先按 2.1 切换归档源,再验证。

2.1 切换阿里云归档源

CentOS 8 的仓库配置使用 mirrorlist 指向已下线的 mirror.centos.org,实测直接 dnf 会得到仓库元数据下载失败。切换到阿里云的 centos-vault 归档,并锁定 8.5.2111(这是 el8 中开始提供 java-17-openjdk 包的版本):

$ sed -i -e 's|mirrorlist=|#mirrorlist=|' -e 's|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com/centos-vault|' /etc/yum.repos.d/CentOS-Linux-*.repo
$ sed -i 's|$releasever/|8.5.2111/|g' /etc/yum.repos.d/CentOS-Linux-BaseOS.repo /etc/yum.repos.d/CentOS-Linux-AppStream.repo /etc/yum.repos.d/CentOS-Linux-Extras.repo
$ grep -m2 baseurl /etc/yum.repos.d/CentOS-Linux-AppStream.repo
baseurl=https://mirrors.aliyun.com/centos-vault/$contentdir/8.5.2111/AppStream/$basearch/os/
#baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/

说明:$contentdir 在 el8 的 /etc/dnf/vars/ 中已定义为 centos,无需改动;$releasever 在 el8 解析为 8,归档目录没有该层级,必须显式替换为 8.5.2111。重建缓存验证:

$ dnf makecache
CentOS Linux 8 - AppStream                      1.2 MB/s | 4.3 kB     00:00
CentOS Linux 8 - BaseOS                         987 kB/s | 3.9 kB     00:00
CentOS Linux 8 - Extras                         1.0 MB/s | 3.0 kB     00:00
Metadata cache created.

三仓库元数据全部可读,源修复完成。

💡 技术拓展:CentOS 8 各归档可用的常见目录对比:

归档路径内容备注
mirrors.aliyun.com/centos-vault/8.5.2111/8.5.2111 全量仓库含 java-17-openjdk,本文采用
mirrors.aliyun.com/centos-vault/8.4.2105/8.4.2101 全量仓库无 java-17 包
vault.centos.org/8.5.2111/官方归档实测部分请求 403,不稳定

本文统一使用阿里云归档的 8.5.2111。

三、版本选型说明

3.1 Ant 版本

💡 技术拓展:el8 下 Ant 有两种来源,实测行为有关键差异:

来源版本antlib 自动发现(xmlns 声明 + jar 在 lib)备注
dnf(AppStream 模块)1.10.5实测不支持jar 必须用 typedef 显式装载,见 5.2
Apache 官方二进制包1.10.18实测支持(在 Ubuntu 侧同版本验证)需自解压维护

本文主用 dnf 渠道的 1.10.5(版本较旧但功能面一致,五个委托器全部实测可用),所有构建文件统一采用 typedef 显式装载方式,规避 1.10.5 的自动发现缺失,两种来源都能跑。若坚持自动发现特性,改用官方 1.10.18 二进制包。

3.2 JDK 版本

dnf 安装 ant 时会连带安装 java-1.8.0-openjdk 并把系统默认 java 指向 1.8(实测第一节环境信息中两个 JDK 并存)。el8 从 8.5.2111 起提供 java-17-openjdk 包。本文以 17.0.1 为开发主 JDK,通过显式 JAVA_HOME 使用(见 5.1),并实测 JDK 8 下 ant-props 同样可用。

3.3 ant-props 版本

唯一版本 1.0.0,与 Ant 1.10.5 兼容实测通过。

四、方案 A:Maven 依赖安装

4.1 安装基础组件

$ dnf install -y java-17-openjdk-devel ant maven curl

安装后确认版本。注意两点实测事实:ant -version 正常输出;java -version 显示 1.8.0_312(ant 的依赖把 1.8 设为了默认);mvn -version 在未显式 JAVA_HOME 时同样绑定 1.8:

$ ant -version
Apache Ant(TM) version 1.10.5 compiled on June 24 2019
$ java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
$ mvn -version
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 1.8.0_312, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "4.18.0-553.el8_10.x86_64", arch: "amd64", family: "unix"

这就是 el8 的第一个坑:Maven 不读取 alternatives 的默认 JVM,1.8 会静默接管构建。显式导出 JAVA_HOME 后复查:

$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
$ export PATH=$JAVA_HOME/bin:$PATH
$ java -version
openjdk version "17.0.1" 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 17.0.1+12-LTS-166)
OpenJDK 64-Bit Server VM 18.9 (build 17.0.1+12-LTS-166, mixed mode, sharing)
$ mvn -version
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 17.0.1, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-553.el8_10.x86_64", arch: "amd64", family: "unix"

JAVA_HOME 生效后 Maven 与 java 均绑定 17.0.1,同时 platform encoding 从 ANSI_X3.4-1968 恢复为 UTF-8。

4.2 创建工程与 pom.xml

$ mkdir -p /root/props-maven-demo
$ cd /root/props-maven-demo
$ vim pom.xml

pom.xml 完整内容(与《Ubuntu 22.04 安装 Apache Props Ant Library 指南》4.2 一致,此处全文给出保证自含):

<?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>demo</groupId>
  <artifactId>props-antlib-demo</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>

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

  <dependencies>
    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.10.18</version>
    </dependency>
    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant-props</artifactId>
      <version>1.0.0</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>3.1.0</version>
        <dependencies>
          <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.10.18</version>
          </dependency>
          <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant-props</artifactId>
            <version>1.0.0</version>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <id>props-quickstart</id>
            <phase>validate</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target xmlns:props="antlib:org.apache.ant.props" name="props-quickstart">
                <typedef resource="org/apache/ant/props/antlib.xml" classpathref="maven.plugin.classpath"/>
                <propertyhelper>
                  <props:nested/>
                  <props:stringops/>
                </propertyhelper>
                <property name="app.env" value="prod"/>
                <property name="db.user.prod" value="app_rw"/>
                <property name="db.pwd.prod" value="q1w2e3r4"/>
                <property name="x" value="foo/bar/baz.ext"/>
                <echo>[1] 嵌套展开 db.user = ${db.user.${app.env}}</echo>
                <echo>[2] 嵌套展开 db.pwd = ${db.pwd.${app.env}}</echo>
                <echo>[3] 未定义取默认 cache.max = ${cache.max:-512}</echo>
                <property name="cache.max" value="1024"/>
                <echo>[4] 已定义取原值 cache.max = ${cache.max:-512}</echo>
                <echo>[5] 删前缀最短 ${x}#*/ = ${x#*/}</echo>
                <echo>[6] 取扩展名 ${x}##*. = ${x##*.}</echo>
                <echo>[7] 删扩展名 ${x}%.* = ${x%.*}</echo>
                <property name="path.str" value="org/apache/ant/props"/>
                <echo>[8] 全部替换斜杠为点 = ${path.str//\//.}</echo>
                <echo>props-antlib quickstart OK</echo>
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

要点:ant 与 ant-props 声明在 maven-antrun-plugin 的 <dependencies> 内进入插件类路径;xmlns:props="antlib:org.apache.ant.props" 声明在 <target> 上;db.pwd.prod 的示例口令统一用 q1w2e3r4。

4.3 构建验证

$ cd /root/props-maven-demo
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
$ export LANG=C.UTF-8
$ MAVEN_OPTS="-Xms256m -Xmx256m" mvn -B validate

实测回显(非首次运行;首次会下载插件与依赖,实测耗时约 24 秒):

[INFO] -----------------------< demo:props-antlib-demo >-----------------------
[INFO] Building props-antlib-demo 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-antrun-plugin:3.1.0:run (props-quickstart) @ props-antlib-demo ---
[INFO] Executing tasks
[WARNING]      [echo] [1] 嵌套展开 db.user = app_rw
[WARNING]      [echo] [2] 嵌套展开 db.pwd = q1w2e3r4
[WARNING]      [echo] [3] 未定义取默认 cache.max = 512
[WARNING]      [echo] [4] 已定义取原值 cache.max = 1024
[WARNING]      [echo] [5] 删前缀最短 foo/bar/baz.ext#*/ = bar/baz.ext
[WARNING]      [echo] [6] 取扩展名 foo/bar/baz.ext##*. = ext
[WARNING]      [echo] [7] 删扩展名 foo/bar/baz.ext%.* = foo/bar/baz
[WARNING]      [echo] [8] 全部替换斜杠为点 = org.apache.ant.props
[WARNING]      [echo] props-antlib quickstart OK
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.573 s
[INFO] Finished at: 2026-10-15T06:06:00Z
[INFO] ------------------------------------------------------------------------

8 条用例全部按预期展开,Maven 3.5.4 与 antrun 3.1.0 兼容实测无版本门槛。

4.4 要点小结

  • el8 的 Maven 3.5.4 必须显式 JAVA_HOME,否则静默使用 1.8 构建(4.1 有前后对照实测)。
  • ant-props 放插件依赖而非工程依赖,与 antrun 内嵌 Ant 同类加载器可见,一次成功。
  • antrun 3.1.0 的 echo 输出走 WARN 级别,[WARNING] [echo] 是正常现象。

五、方案 B:jar 直用(独立 Ant)

5.1 下载构件并校验

$ mkdir -p /opt/props-antlib /root/props-demo
$ cd /opt/props-antlib
$ curl -s --max-time 120 -O https://repo1.maven.org/maven2/org/apache/ant/ant-props/1.0.0/ant-props-1.0.0.jar
$ curl -s --max-time 60 -O https://repo1.maven.org/maven2/org/apache/ant/ant-props/1.0.0/ant-props-1.0.0.jar.sha1
$ ls -l ant-props-1.0.0.jar
-rw-r--r-- 1 root root 33260 Oct 15 06:05 ant-props-1.0.0.jar
$ echo "期望: $(cat ant-props-1.0.0.jar.sha1)"
期望: da89e11da0ab59ce1b1ea5e79a220f98a73c5792
$ echo "实测: $(sha1sum ant-props-1.0.0.jar | awk '{print $1}')"
实测: da89e11da0ab59ce1b1ea5e79a220f98a73c5792

校验一致。

5.2 typedef 显式装载(el8 推荐方式)

把 jar 与构建文件放同一目录,构建文件用 <typedef uri="antlib:org.apache.ant.props" .../> 显式装载:

$ cp /opt/props-antlib/ant-props-1.0.0.jar /root/props-demo/
$ cd /root/props-demo
$ vim quickstart.xml

quickstart.xml 完整内容:

<?xml version="1.0" encoding="UTF-8"?>
<project name="props-quickstart" default="run" xmlns:props="antlib:org.apache.ant.props">
  <typedef uri="antlib:org.apache.ant.props" resource="org/apache/ant/props/antlib.xml" classpath="ant-props-1.0.0.jar"/>

  <propertyhelper>
    <props:nested/>
    <props:stringops/>
  </propertyhelper>

  <target name="run">
    <property name="app.env" value="prod"/>
    <property name="db.user.prod" value="app_rw"/>
    <property name="db.pwd.prod" value="q1w2e3r4"/>
    <property name="x" value="foo/bar/baz.ext"/>
    <echo>[1] 嵌套展开 db.user = ${db.user.${app.env}}</echo>
    <echo>[2] 嵌套展开 db.pwd = ${db.pwd.${app.env}}</echo>
    <echo>[3] 未定义取默认 cache.max = ${cache.max:-512}</echo>
    <property name="cache.max" value="1024"/>
    <echo>[4] 已定义取原值 cache.max = ${cache.max:-512}</echo>
    <echo>[5] 删前缀最短 ${x}#*/ = ${x#*/}</echo>
    <echo>[6] 取扩展名 ${x}##*. = ${x##*.}</echo>
    <echo>[7] 删扩展名 ${x}%.* = ${x%.*}</echo>
    <property name="path.str" value="org/apache/ant/props"/>
    <echo>[8] 全部替换斜杠为点 = ${path.str//\//.}</echo>
    <echo>props-antlib quickstart OK</echo>
  </target>
</project>

用 JDK 17 运行(同时验证 el8 上 Ant 由 JAVA_HOME 驱动 JVM):

$ cd /root/props-demo
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
$ export PATH=$JAVA_HOME/bin:$PATH
$ export LANG=C.UTF-8
$ java -version | head -1
openjdk version "17.0.1" 2021-10-19 LTS
$ ANT_OPTS="-Xms256m -Xmx256m" ant -f quickstart.xml
Buildfile: /root/props-demo/quickstart.xml

run:
     [echo] [1] 嵌套展开 db.user = app_rw
     [echo] [2] 嵌套展开 db.pwd = q1w2e3r4
     [echo] [3] 未定义取默认 cache.max = 512
     [echo] [4] 已定义取原值 cache.max = 1024
     [echo] [5] 删前缀最短 foo/bar/baz.ext#*/ = bar/baz.ext
     [echo] [6] 取扩展名 foo/bar/baz.ext##*. = ext
     [echo] [7] 删扩展名 foo/bar/baz.ext%.* = foo/bar/baz
     [echo] [8] 全部替换斜杠为点 = org.apache.ant.props
     [echo] props-antlib quickstart OK

BUILD SUCCESSFUL
Total time: 0 seconds

5.3 关于 ANT_HOME/lib 自动发现的实测结论

官方手册支持把 jar 放入 ANT_HOME/lib 后仅靠 xmlns 声明自动发现。在 el8 的 ant 1.10.5 上实测该方式不生效:jar 已复制进 /usr/share/ant/lib(ant -diagnostics 可见其在类路径上),但构建文件仍报 propertyhelper doesn't support the nested "nested" element.。ant -lib /usr/share/ant/lib 显式传参同样无效。结论:el8 重打包的 Ant 丢失了 antlib 自动发现能力,方案 B 必须走 5.2 的 typedef 显式装载(jar 与构建文件同目录,或 classpath 写绝对路径 /opt/props-antlib/ant-props-1.0.0.jar)。

5.4 JDK 8 兼容性实测

el8 默认 java 就是 1.8.0_312,直接在默认 JVM 下复跑:

$ cd /root/props-demo
$ export LANG=C.UTF-8
$ unset JAVA_HOME
$ ant -f quickstart.xml | head -8
Buildfile: /root/props-demo/quickstart.xml

run:
     [echo] [1] 嵌套展开 db.user = app_rw
     [echo] [2] 嵌套展开 db.pwd = q1w2e3r4
     [echo] [3] 未定义取默认 cache.max = 512
     [echo] [4] 已定义取原值 cache.max = 1024

JDK 8 与 JDK 17 行为一致。生产建议仍按第七节显式声明 JAVA_HOME,避免环境漂移。

六、方案对比

维度方案 A:Maven 依赖方案 B:jar 直用
前置软件java-17-openjdk-devel + mavenJDK + ant(dnf 或官方包)
jar 位置~/.m2 自动管理/opt/props-antlib,typedef 指向
el8 特有风险Maven 不读 alternatives,必须 JAVA_HOMEantlib 自动发现失效,必须 typedef
版本升级改 pom 版本号换 jar 文件名并改 classpath
本文实测mvn 3.5.4 + antrun 3.1.0 通过ant 1.10.5 + JDK 17/8 通过

el8 上两个方案都必须附加一项显式配置(JAVA_HOME 或 typedef),这是与 Ubuntu 环境最大的差异。

七、基础配置与运行参数

7.1 JAVA_HOME 持久化

el8 下最关键的配置,建议写入 /etc/profile.d/java17.sh:

$ cat > /etc/profile.d/java17.sh <<'EOF'
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH
EOF
$ chmod +x /etc/profile.d/java17.sh
$ source /etc/profile.d/java17.sh

之后新登录会话自动获得 17.0.1。验证:mvn -version 的 Java version 行应显示 17.0.1(对照 4.1 的实测输出)。

7.2 JVM 堆参数

Ant 与 Maven 分别通过 ANT_OPTS 与 MAVEN_OPTS 接收 JVM 参数,两份脚本(/usr/bin/ant、/usr/bin/mvn)在启动时读取。按 256 MB 配置并持久化:

$ cat >> /etc/profile.d/java17.sh <<'EOF'
export ANT_OPTS="-Xms256m -Xmx256m"
export MAVEN_OPTS="-Xms256m -Xmx256m"
EOF
$ source /etc/profile.d/java17.sh

本文 5.2 的运行均在 ANT_OPTS="-Xms256m -Xmx256m" 下完成,ant-props 仅做属性求值,内存占用极低。

7.3 中文输出编码

el8 默认 locale 在 SSH 会话中通常已是 en_US.UTF-8,但最小安装或无人值守会话可能是 POSIX。统一在 profile 或命令前导出:

$ export LANG=C.UTF-8

未导出时 echo 中文显示为问号,导出后正常(对比 5.2 回显)。

八、验证清单

三步确认安装完整(任一环境均适用):

$ ant -version
Apache Ant(TM) version 1.10.5 compiled on June 24 2019
$ ant -f /root/props-demo/quickstart.xml | tail -2
     [echo] props-antlib quickstart OK

BUILD SUCCESSFUL
$ mvn -version | head -3
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 17.0.1, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64

三项输出与本文实测一致即安装完成。

九、FAQ

9.1 dnf 报仓库元数据下载失败 / 403

CentOS 8 已 EOL,mirror.centos.org 已下线,vault.centos.org 实测部分请求 403。修复:按 2.1 切换阿里云归档 mirrors.aliyun.com/centos-vault/8.5.2111 后 dnf makecache。

9.2 Maven 构建用了 JDK 1.8 而不是 17

el8 的 Maven 启动脚本不读 alternatives,JAVA_HOME 未设置时会落到 1.8(4.1 实测前后对照:Java version: 1.8.0_312 与 Java version: 17.0.1)。修复:显式 export JAVA_HOME=/usr/lib/jvm/java-17-openjdk 并按 7.1 持久化。

9.3 antlib 自动发现不生效,报 propertyhelper doesn't support the nested "nested" element.

实测 ant 1.10.5(el8 打包)在 jar 已入 /usr/share/ant/lib、甚至 ant -lib 显式传参的情况下都无法自动发现 antlib。两条修复路径:jar 与构建文件同目录加 typedef(5.2 实测通过);或改用 Apache 官方 1.10.18 二进制包(自动发现特性完好)。

9.4 typedef 报 Could not load definitions from resource org/apache/ant/props/antlib.xml. It could not be found.

实测触发条件:classpath 属性写的是相对路径 ant-props-1.0.0.jar,但 jar 不在构建文件 basedir 下。el8 上该 classpath 不会回退到系统类路径查找。修复:把 jar 复制到构建文件同目录,或 classpath 写绝对路径 /opt/props-antlib/ant-props-1.0.0.jar。

9.5 echo 中文乱码

platform encoding: ANSI_X3.4-1968(4.1 未设 JAVA_HOME 时的实测输出)说明 JVM 默认字符集不是 UTF-8。修复:export LANG=C.UTF-8,或按 7.1 持久化(JAVA_HOME=17 后 platform encoding 实测自动恢复 UTF-8)。

9.6 antrun 里 echo 前缀 [WARNING] 是报错吗

不是。antrun 3.1.0 将 Ant 输出路由到 WARN 级别,BUILD SUCCESS 即为通过(回显见 4.3)。

9.7 dnf 的 ant 包版本太旧(1.10.5)怎么办

ant-props 五个委托器在 1.10.5 上实测功能完整,可放心使用。若需要 1.10.18 的新特性,下载官方二进制包解压到 /opt/apache-ant-1.10.18 并 export ANT_HOME=/opt/apache-ant-1.10.18,ANT_HOME 优先级高于系统脚本内默认值,随后按 5.2 同样方式装载 jar。

十、卸载与清理

预览并执行卸载(逐条列出,按需取舍):

$ dnf remove -y ant
Removed:
  ant-lib-1.10.5-1.module_el8.0.0+47+197dca37.noarch
$ rpm -q ant
package ant is not installed
$ dnf remove -y maven
$ rm -f /usr/share/ant/lib/ant-props-1.0.0.jar
$ rm -rf /opt/props-antlib /root/props-demo /root/props-maven-demo

实测 rpm -q ant 返回 not installed,el8 的 ant 以 ant-lib 模块形式随卸载移除。卸载实测后重新安装只需重跑 dnf install -y ant 与 5.1 的下载命令。若 JVM 供其他服务使用,保留 java-17-openjdk-devel 包。

十一、参考链接