运行 来自 Ant 的带有自定义 JAVA_HOME 和 java.home 的 Ant 任务

Run Ant task from Ant with custom JAVA_HOME and java.home

上下文

我正在将依赖库的存储库中的 Java 版本从 8 升级到 17。我想用 Java 17 构建存储库,但是用 Java 8 构建库,因为它不能用 Java 8.

构建

环境

Docker 容器 Java 17,还有 Java 8.

问题

存储库通过 运行 ant 任务在该库中构建库

<ant dir="${lib-build-top}" target="all"/>
<ant dir="${lib-build-top}" target="buildjars"/>

在终端中可以使用

构建库
JAVA_HOME=path/to/jdk8 ant

所以我希望能够做类似

的事情
set JAVA_HOME and java.home from jdk17 to jdk8
<ant dir="${lib-build-top}" target="all"/>
<ant dir="${lib-build-top}" target="buildjars"/>
change JAVA_HOME and java.home back to jdk17

我该怎么做?

我认为唯一的方法是使用不同的 JAVA_HOME 环境变量创建一个新的 Ant 进程。在 the documentation of <exec>:

中甚至有一个 运行 Ant 这样的例子
<condition property="jdk8-home"
           value="C:\Program Files\Java\jdk1.8.0_301">
    <os family="windows"/>
</condition>
<property name="jdk8-home" location="/usr/lib/jvm/java-8-openjdk-amd64"/>

<property name="ant-executable" location="${ant.home}/bin/ant"/>

<exec osfamily="unix" executable="${ant-executable}">
    <arg value="-buildfile"/>
    <arg file="${ant.file}"/>
    <arg value="all"/>
    <env key="JAVA_HOME" file="${jdk8-home}"/>
</exec>
<exec osfamily="windows" executable="cmd">
    <arg value="/c"/>
    <arg file="${ant-executable}.bat"/>
    <arg value="-buildfile"/>
    <arg file="${ant.file}"/>
    <arg value="all"/>
    <env key="JAVA_HOME" file="${jdk8-home}"/>
</exec>

<exec osfamily="unix" executable="${ant-executable}">
    <arg value="-buildfile"/>
    <arg file="${ant.file}"/>
    <arg value="buildjars"/>
    <env key="JAVA_HOME" file="${jdk8-home}"/>
</exec>
<exec osfamily="windows" executable="cmd">
    <arg value="/c"/>
    <arg file="${ant-executable}.bat"/>
    <arg value="-buildfile"/>
    <arg file="${ant.file}"/>
    <arg value="buildjars"/>
    <env key="JAVA_HOME" file="${jdk8-home}"/>
</exec>