使用 ANT 时,如果我有一些特定的 java 版本,我如何才能定义任务?

Posted

技术标签:

【中文标题】使用 ANT 时,如果我有一些特定的 java 版本,我如何才能定义任务?【英文标题】:When using ANT, how can I define a task only if I have some specific java version? 【发布时间】:2010-09-13 22:54:03 【问题描述】:

我的问题是,只有在构建计算机中安装了 Java 1.5 时,才能执行 Ant 中的特定步骤。任务定义使用的是使用 1.5 编译的 jar 文件,因此使用 1.4 虚拟机运行会抛出 IncompatibleClassVersion 异常。

我必须同时找到一个解决方案才能让这个任务适用于这个需要 1.4 的特定项目,但是我遇到了一个问题。如果我没有特定的 java 版本,如何避免定义此任务并执行此可选步骤?

我可以在目标标签上使用“if”或“unless”标签,但它们只检查是否设置了属性。我也想有一个不需要额外库的解决方案,但我不知道标准中的内置功能是否足以执行这样的任务。

【问题讨论】:

【参考方案1】:

Java 版本通过 ant.java.version 属性公开。使用条件设置属性,只有当它为真时才执行任务。

<?xml version="1.0" encoding="UTF-8"?>

<project name="project" default="default">

    <target name="default" depends="javaCheck" if="isJava6">
        <echo message="Hello, World!" />
    </target>

    <target name="javaCheck">
        <echo message="ant.java.version=$ant.java.version" />
        <condition property="isJava6">
            <equals arg1="$ant.java.version" arg2="1.6" />
        </condition>
    </target>

</project>

【讨论】:

【参考方案2】:

要签入构建文件的属性是$ant.java.version

当属性等于某个值时,您可以使用&lt;condition&gt; 元素使任务成为条件:

<condition property="legal-java">
  <matches pattern="1.[56].*" string="$ant.java.version"/>
</condition>

【讨论】:

啊,可惜我不得不使用 Ant 1.6!此正则表达式功能仅在 ant 1.7 后可用!

以上是关于使用 ANT 时,如果我有一些特定的 java 版本,我如何才能定义任务?的主要内容,如果未能解决你的问题,请参考以下文章

想要一个 eclipse java 项目自动运行 ant 构建文件

如何使用 Ant Design Vue 禁用 Select 中的特定元素?

将外部 JS 引擎添加到 Eclipse 运行时以在 Java 15 中使用 Eclipse Java 编译器和 Ant 中的 <script>

如果表包含具有特定值的键

在 Eclipse 中使用 ANT 脚本时如何调试 Java 代码

Eclipse 是不是使用自己的发行版发布 ant?