Ant:根据属性编译类

时间:2010-09-02 15:59:36

标签: ant conditional

我正在尝试让Ant根据我在属性文件中设置的属性(module)来编译我项目的部分内容。这是我与蚂蚁的第一次“真正的”互动,所以请耐心等待:)。

我不想创建多个目标,因为构建过程中模块之间唯一不同的是正在编译的类的数量和一些资源。

现在,这是我的编译目标:

<target name="compile.classes" depends="init" description="compile the source">
    <mkdir dir="${classes}"/>
    <mkdir dir="${lib}"/>

    <copy todir="${classes}">
        <fileset dir="${src}">
            <patternset refid="resources"/>
        </fileset>
    </copy>

    <echo message="${classes}"/>

    <!-- Compile the java code from ${src} into ${classes} -->
    <javac srcdir="${src}" destdir="${classes}">
        <!-- Conditions for compiling the separate modules -->
        <classpath refid="libs"/>
    </javac>
</target>

我想要的是一些基于我已经设置的module属性值的条件。类似的东西:

<javac srcdir="${src}" destdir="${classes}">
    <if>
        <equals arg1="${module}" arg2="gpl" />
        <then>
            <patternset refid="gpl-classes"/>
        </then>
        <elseif /> <!-- etc -->
    </if>
</javac>

虽然我已经安装了ant-contrib(我已经用简单的回声在其他地方测试了if标签并且它有效)但如果条件在javac标签内,它不会让我放置。此外,它不允许我将它们放在patternset标记内。

有什么方法可以根据属性调整我编译的类?

3 个答案:

答案 0 :(得分:1)

如果您需要条件逻辑功能,可以使用antcontrib库,特别是 if task

然后你可以这样做:

<if>
  <equals arg1="${module}" arg2="gpl" />
  <then>
    <path id="javac.classpath">
      <path refid="libs"/>
      <path refid="gpl-classes"/>
    </path>
  </then>
  <else>
    <path id="javac.classpath" refid="libs"/>
  </else>
</if>

<javac srcdir="${src}" destdir="${classes}">
  <classpath refid="java.classpath"/>
</javac>

答案 1 :(得分:1)

如果我理解正确,可以通过参考ID来满足文件集。

基本上你

  • 为与模块关联的每组来源定义patternset id
  • 使用patternset patternset
  • 中的属性值选择要使用的refid

以下是插图:

<patternset id="pattern1">
    <include name="*1.txt" />
</patternset>

<patternset id="pattern2">
    <include name="*2.txt" />
</patternset>

<property name="pattern_choice" value="pattern2" />

<mkdir dir="dest" /> 
<delete dir="dest" /> 

<copy todir="dest">
    <fileset dir=".">
        <patternset refid="${pattern_choice}" />
    </fileset>
</copy>

通过更改属性pattern_choice的值,可以更改复制的文件集。您可以在属性文件中设置它。

答案 2 :(得分:0)

您似乎想要使用MacroDef