5

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

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

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

4

2 回答 2

10

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>
于 2008-09-29T08:10:54.627 回答
2

在构建文件中检查的属性是${ant.java.version}.

<condition>当属性等于某个值时,您可以使用该元素使任务有条件:

<condition property="legal-java">
  <matches pattern="1.[56].*" string="${ant.java.version}"/>
</condition>
于 2008-09-29T08:18:19.990 回答