Условное включение библиотек Flex (SWC) в задачи mxmlc/compc ant
Я пытался выяснить, как условно включить библиотеки 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 ответа
Если вы не можете получить <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>
с макроопределением.
Задача 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 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>