Условное включение библиотек Flex (SWC) в задачи mxmlc / compc ant - PullRequest
2 голосов
/ 13 января 2010

Я пытался понять, как условно включить библиотеки Flex в сборку ant на основе свойства, заданного в командной строке. Я пробовал несколько подходов с задачей <condition/>, но до сих пор не получил ее на работу. Вот где я сейчас нахожусь.

У меня есть цель инициализации, включающая условные задачи, такие как:

 <condition property="automation.libs" value="automation.qtp">
  <equals arg1="${automation}" arg2="qtp" casesensitive="false" trim="true"/>
 </condition>

Цель этой задачи - установить свойство, определяющее имя набора шаблонов, который будет использоваться при объявлении неявного набора файлов в задачах mxmlc или compc. Набор шаблонов, указанный выше, определяется как:

 <patternset id="automation.qtp">
  <include name="automation*.swc"/>
  <include name="qtp.swc"/>
 </patternset>

Затем на указанный набор шаблонов ссылается задача mxmlc или compc следующим образом:

<compc>
 <compiler.include-libraries dir="${FLEX_HOME}/frameworks/libs" append="true">
  <patternset refid="${automation.libs}"/>
 </compiler.include-libraries>
</compc>

Это не похоже на работу. По крайней мере размер SWC не указывает на то, что дополнительные библиотеки автоматизации были скомпилированы. Я хочу иметь возможность указать свойство командной строки, которое определяет, какой набор шаблонов использовать для различных типов сборок.

У кого-нибудь есть идеи о том, как этого добиться? Спасибо!

Ответы [ 2 ]

2 голосов
/ 13 января 2010

Если вы не можете заставить <patternset> работать правильно, вы можете взглянуть на задачи <if> <then> и <else>, предоставляемые ant-contrib. В итоге мы сделали что-то вроде этого:

<target name = "build">
    <if>
        <equals arg1="automation.qtp" arg2="true"/>
        <then>
            <!--
               - Build with QTP support.
               -->
        </then>
        <else>
            <!--
               - Build without QTP support.
               -->
        </else>
    </if>
</target>

Существует некоторое дублирование логики сборки между ветвями if и else, но вы можете кое-что из этого выделить, если заключите <mxmlc> в макроопределение.

0 голосов
/ 14 апреля 2016

Задача mxmlc поддерживает загрузку файлов конфигурации <load-config filename="path/to/flex-config.xml" />. Итак, сгенерируйте xml-конфигурацию на лету, объединив задачу echoxml и if-then-else.

<echoxml file="path/to/flex-config.xml">
    <flex-config>
        <compiler>
            <library-path append="true">
                <path-element>${lib.qtp}</path-element>
            </library-path>
        </compiler>
    </flex-config>
</echoxml>

Если ваши потребности сложнее, вы можете даже сгенерировать несколько xml-конфигураций и <load-config ... /> их всех.

Лично я нахожу любую логику очень лаконичной и уродливой для написания, используя условия Ant или, если-то-еще, XML не очень приятный язык для программирования. К счастью, можно использовать более гибкий подход - написать сценарий для создания XML-конфигурации перед вызовом mxmlc. Например. используйте задачу script с вашим любимым языком сценариев

<script language="javascript">
    <![CDATA[
        // Create your XML dynamically here.
        // Write that XML to an external file.
        // Later, feed that file to mxmlc using `<load-config ... />`.
    ]]>
</script>
...