Ant: компилировать классы в зависимости от свойства - PullRequest
2 голосов
/ 02 сентября 2010

Я пытаюсь заставить 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 ]

1 голос
/ 03 сентября 2010

Если я правильно понимаю, наборы файлов можно обрабатывать с помощью ссылочных идентификаторов.

По существу вы

  • определяете 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, изменяется набор копируемых файлов.Вы можете установить это в вашем файле свойств.

1 голос
/ 03 сентября 2010

Если вам нужна функциональность условной логики, вы можете использовать библиотеку antcontrib, в частности ее , если задача .

Тогда вы можете сделать что-то вроде этого:

<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>
0 голосов
/ 07 сентября 2010

Похоже, вы хотите использовать MacroDef

...