使用ANT时,仅当我具有某些特定的Java版本时,才能如何定义任务?

时间:2020-03-06 14:51:51  来源:igfitidea点击:

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

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

我可以在目标标签上使用" if"或者"除非"标签,但是那些标签只能检查是否设置了属性。我还希望有一个不需要额外库的解决方案,但是我不知道标准的内置功能是否足以执行此类任务。

解决方案

Java版本通过ant.java.version属性公开。使用条件来设置属性并仅在其为true时才执行任务。

<?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>

要检入构建文件的属性是$ {ant.java.version}

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

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