Коллекция примеров использования ANT для автоматизации приложений/игр со строительством. Это предназначено для того, чтобы быть кулинарной книгой или учебным ресурсом, поэтому каждый пример максимально маленький и должен быть самоописанием.
Сделайте свою постоянную интеграцию готовой!
В первую очередь вы должны установить JRE (среда выполнения Java). Чтобы проверить, что все работает, как и ожидалось, просто введите $ java на свой терминал.
Затем вам нужно скачать Ant с http://ant.apache.org/bindownload.cgi. Просто извлеките загруженный файл .zip в каталог ~/sdks/ant , установите переменную среды ANT_HOME в это место и добавьте ANT_HOME в PATH :
${ANT_HOME}/bin (macos) или %ANT_HOME%/bin (windows)
Чтобы проверить, что все работает, как и ожидалось, просто введите $ ant в ваш терминал.
Если вы используете MacOS, вы можете установить Ant с помощью варева:
$ brew install ant
Если вы используете Adobe Flash Builder 4.7, вы можете найти Air SDK AT /Applications/Adobe Flash Builder 4.7/eclipse/plugins/com.adobe.flash.compiler_4.7.0.349722 (macOS) или C:Program Files (x86)AdobeAdobe Flash Builder 4.7eclipsepluginscom.adobe.flash.compiler_4.7.0.349722 (Windows).
В противном случае, вы можете скачать его с http://www.adobe.com/devnet/air/air-sdk-dulload.html. Просто извлеките его в, скажем, ~/sdks/air Directory.
Если вы используете Adobe Flash Builder 4.7, вы можете найти каталог Flex SDKS по адресу <FlashBuilder_installation_location>/sdks .
В противном случае вы должны загрузить и установить его вручную. Я лично предпочитаю выпуск Adobe, который можно загрузить с http://www.adobe.com/devnet/flex/flex-sdk-dudload.html. Просто извлеките его в каталог, скажем, ~/sdks/flex . Но вы можете использовать последнюю версию Flex SDK, которая в настоящее время разрабатывается Apache. Если это так, вы можете установить его, используя их http://flex.apache.org/installer.html.
Вы должны установить переменную среды FLEX_HOME и добавить ее в PATH .
Вы используете компилятор приложения для компиляции файлов SWF из вашего ActionScript и/или исходных файлов MXML.
Вы используете компилятор компонента для генерации файла SWC из исходных файлов компонентов и других файлов активов, таких как изображения и листы стилей.
Вы можете собрать активы ActionScript и MXML вашего Air Application с командной строкой MXML Compiler (AMXMLC).
Используйте компилятор компонента, ACOMPC, для составления воздушных библиотек и независимых компонентов.
ASDOC-это инструмент командной строки, который вы можете использовать для создания справочной документации языка API в качестве HTML-страниц из классов ActionScript и файлов MXML.
Инструмент Air Developer-это многоцелевой инструмент командной строки для разработки воздушных приложений. Вы можете использовать ADT для выполнения следующих задач:
Используйте запуск Air Debug для запуска приложений как на основе SWF, так и на основе HTML во время разработки. Используя ADL, вы можете запустить приложение без первой упаковки и его установки. По умолчанию ADL использует время выполнения, включенное в SDK, что означает, что вам не нужно устанавливать время выполнения отдельно для использования ADL.
Самый простой файл ant build.xml, в котором описывается, как построить файл bin/output.swc :
<? xml version = " 1.0 " ?>
< project name = " swc example " default = " main " basedir = " . " >
< taskdef resource = " flexTasks.tasks " classpath = " ${FLEX_HOME}/ant " />
< property name = " DEPLOY.dir " value = " ${basedir}/bin " />
< target name = " main " depends = " clean, compile " />
< target name = " clean " >
< delete dir = " ${DEPLOY.dir} " />
< mkdir dir = " ${DEPLOY.dir} " />
</ target >
< target name = " compile " >
< compc output = " ${DEPLOY.dir}/output.swc " failonerror = " true " maxmemory = " 1024m " >
< source-path path-element = " ${basedir}/src " />
< include-sources dir = " ${basedir}/src " includes = " * " />
</ compc >
</ target >
</ project > Допустим, что проект содержит каталог libs с связанными библиотеками .SWC. Мы должны сказать Compc, где их найти:
<? xml version = " 1.0 " ?>
< project name = " swc example " default = " main " basedir = " . " >
< taskdef resource = " flexTasks.tasks " classpath = " ${FLEX_HOME}/ant " />
< property name = " DEPLOY.dir " value = " ${basedir}/bin " />
< target name = " main " depends = " clean, compile " />
< target name = " clean " >
< delete dir = " ${DEPLOY.dir} " />
< mkdir dir = " ${DEPLOY.dir} " />
</ target >
< target name = " compile " >
< compc output = " ${DEPLOY.dir}/output.swc " failonerror = " true " maxmemory = " 1024m " >
< source-path path-element = " ${basedir}/src " />
< include-sources dir = " ${basedir}/src " includes = " * " />
< library-path dir = " ${basedir}/libs " includes = " * " append = " true " />
</ compc >
</ target >
</ project >Или если мы хотим указать файл .swc, расположенный в любом месте:
<? xml version = " 1.0 " ?>
< project name = " swc example " default = " main " basedir = " . " >
< taskdef resource = " flexTasks.tasks " classpath = " ${FLEX_HOME}/ant " />
< property name = " DEPLOY.dir " value = " ${basedir}/bin " />
< target name = " main " depends = " clean, compile " />
< target name = " clean " >
< delete dir = " ${DEPLOY.dir} " />
< mkdir dir = " ${DEPLOY.dir} " />
</ target >
< target name = " compile " >
< compc output = " ${DEPLOY.dir}/output.swc " failonerror = " true " maxmemory = " 1024m " >
< source-path path-element = " ${basedir}/src " />
< include-sources dir = " ${basedir}/src " includes = " * " />
< library-path file = " lib.swc " append = " true " />
</ compc >
</ target >
</ project >Теперь мы используем пользовательские метаданные и хотим держать их в скомпилированном приложении (поведение по умолчанию заключается в том, что они удаляют их, чтобы сохранить приложение/библиотеку как можно меньше):
<? xml version = " 1.0 " ?>
< project name = " swc example " default = " main " basedir = " . " >
< taskdef resource = " flexTasks.tasks " classpath = " ${FLEX_HOME}/ant " />
< property name = " DEPLOY.dir " value = " ${basedir}/bin " />
< target name = " main " depends = " clean, compile " />
< target name = " clean " >
< delete dir = " ${DEPLOY.dir} " />
< mkdir dir = " ${DEPLOY.dir} " />
</ target >
< target name = " compile " >
< compc output = " ${DEPLOY.dir}/output.swc " failonerror = " true " maxmemory = " 1024m " >
< source-path path-element = " ${basedir}/src " />
< include-sources dir = " ${basedir}/src " includes = " * " />
< library-path dir = " ${basedir}/libs " includes = " * " append = " true " />
< keep-as3-metadata name = " Inject " />
< keep-as3-metadata name = " PostConstruct " />
< keep-as3-metadata name = " ArrayElementType " />
</ compc >
</ target >
</ project >< compc ... target-player = " 11.4 " swf-version = " 17 " /> Не забудьте проверить, есть ли FLEX_HOME/frameworks/libs/player/<target-version>/playerglobal.swc и ${FLEX_HOME}/runtimes/player/<target-version>/.../FlashPlayerDebugger Существуют Flashplayerdebugger. Вы можете найти все выпущенные версии отладчиков Playerglobal.swc и Flash Player по адресу http://helpx.adobe.com/flash-player/kb/archived-flash-player-versions.html.
| SWF-версия | целевой игрок |
|---|---|
| 9 | 9 |
| 10 | 10.0, 10.1 |
| 11 | 10.2 |
| 12 | 10.3 |
| 13 | 11.0 |
| 14 | 11.1 |
| 15 | 11.2 |
| 16 | 11.3 |
| 17 | 11.4 |
| 18 | 11,5 |
| 19 | 11.6 |
| 20 | 11.7 |
| 21 | 11.8 |
| 22 | 11,9 |
| 23 | 12.0 |
| 24 | 13.0 |
| 25 | 14.0 |
| 26 | 15.0 |
| 27 | 16.0 |
Давайте посмотрим на параметры Compc. Если вы заинтересованы в более подробной информации, вы можете выбросить конфигурацию, отчет о размере и отчет о ссылке:
< compc ... dump-config = " ${DEPLOY.dir}/config.xml " size-report = " ${DEPLOY.dir}/sizereport.xml " link-report = " ${DEPLOY.dir}/linkreport.xml " >Отключить предупреждения:
< compc ... warnings = " false " >Если вы создаете много приложений/библиотек, вы можете исчерпать память. Очень полезно настроен опция Fork to True, который должен решить, особенно с MaxMemory, установленным хотя бы на один концерт, все:
< compc ... fork = " true " > Самый простой файл ant build.xml, который описывает, как построить файл bin/output.swf :
<? xml version = " 1.0 " ?>
< project name = " swf example " default = " main " basedir = " . " >
< taskdef resource = " flexTasks.tasks " classpath = " ${FLEX_HOME}/ant " />
< property name = " DEPLOY.dir " value = " ${basedir}/bin " />
< target name = " main " depends = " clean, compile " />
< target name = " clean " >
< delete dir = " ${DEPLOY.dir} " />
< mkdir dir = " ${DEPLOY.dir} " />
</ target >
< target name = " compile " >
< mxmlc file = " ${basedir}/src/Main.mxml " output = " ${DEPLOY.dir}/output.swf " failonerror = " true " maxmemory = " 1024m " >
< source-path path-element = " ${basedir}/src " />
</ mxmlc >
</ target >
</ project >Компилятор MXMLC предлагает почти те же параметры, что и компилятор COMPC. Каждый пример, описанный в разделе «Строительство SWC», может быть легко изменен на команду MXMLC. Сравните пример 1 с примером 9, и вы увидите.
Самый простой файл ant build.xml, который описывает, как построить файл bin/output.swf :
<? xml version = " 1.0 " ?>
< project name = " swf example " default = " main " basedir = " . " >
< taskdef resource = " flexTasks.tasks " classpath = " ${FLEX_HOME}/ant " />
< property name = " DEPLOY.dir " value = " ${basedir}/bin " />
< target name = " main " depends = " clean, compile " />
< target name = " clean " >
< delete dir = " ${DEPLOY.dir} " />
< mkdir dir = " ${DEPLOY.dir} " />
</ target >
< target name = " compile " >
< mxmlc
file= " ${basedir}/src/Main.as "
output= " ${DEPLOY.dir}/output.swf "
static-link-runtime-shared-libraries= " true "
failonerror= " true "
maxmemory= " 1024m " >
< source-path path-element = " ${basedir}/src " />
< source-path path-element = " ${FLEX_HOME}/frameworks " />
</ mxmlc >
</ target >
</ project >Компилятор MXMLC предлагает почти те же параметры, что и компилятор COMPC. Каждый пример, описанный в разделе «Строительство SWC», может быть легко изменен на команду MXMLC. Сравните пример 1 с примером 10, и вы увидите.
Самый простой файл ant build.xml, который описывает, как построить файл bin/output.swf :
<? xml version = " 1.0 " ?>
< project name = " swf example " default = " main " basedir = " . " >
< taskdef resource = " flexTasks.tasks " classpath = " ${FLEX_HOME}/ant " />
< property name = " DEPLOY.dir " value = " ${basedir}/bin " />
< target name = " main " depends = " clean, compile " />
< target name = " clean " >
< delete dir = " ${DEPLOY.dir} " />
< mkdir dir = " ${DEPLOY.dir} " />
</ target >
< target name = " compile " >
< mxmlc file = " ${basedir}/src/Main.as " output = " ${DEPLOY.dir>/output.swf " configname = " air " failonerror = " true " >
< library-path dir = " ${FLEX_HOME} " append = " true " >
< include name = " frameworks/libs " />
</ library-path >
< library-path dir = " ${FLEX_HOME} " append = " true " >
< include name = " frameworks/libs/air " />
</ library-path >
</ mxmlc >
</ target >
</ project >Компилятор MXMLC предлагает почти те же параметры, что и компилятор COMPC. Каждый пример, описанный в разделе «Строительство SWC», может быть легко изменен на команду MXMLC. Сравните пример 1 с примером 11, и вы увидите.
Ссылки на быструю загрузку: Apache FlexUnit 4.2, FlexUnit 4.1
Не забудьте добавить
CIListenerв ваш экземплярFlexUnitCore.
<? xml version = " 1.0 " ?>
< project name = " swf example " default = " main " basedir = " . " >
< taskdef resource = " flexTasks.tasks " classpath = " ${FLEX_HOME}/ant " />
< taskdef resource = " flexUnitTasks.tasks " >
< classpath >
< fileset dir = " <path_to_flex_unit_ant_tasks_dir> " >
< include name = " flexUnitTasks*.jar " />
</ fileset >
</ classpath >
</ taskdef >
< property name = " DEPLOY.dir " value = " ${basedir}/bin " />
< property name = " TESTS.dir " value = " ${basedir}/tests-output " />
< target name = " main " depends = " clean, tests, compile " />
< target name = " clean " >
< delete dir = " ${DEPLOY.dir} " />
< mkdir dir = " ${DEPLOY.dir} " />
< delete dir = " ${TESTS.dir} " />
< mkdir dir = " ${TESTS.dir} " />
</ target >
< target name = " tests " >
< mxmlc file = " ${basedir}/src/tests.mxml " output = " ${TESTS.dir}/tests.swf " failonerror = " true " verbose-stacktraces = " true " >
< source-path path-element = " ${basedir}/src " />
< library-path dir = " ${basedir}/libs " includes = " * " append = " true " />
</ mxmlc >
< flexunit
swf= " ${TESTS.dir}/tests.swf "
toDir= " ${TESTS.dir} "
haltonfailure= " false " failureproperty = " flexunit.failure "
verbose= " true "
localTrusted= " true "
command= " ${FLEX_HOME}/runtimes/player/11.4/win/FlashPlayerDebugger.exe " />
< junitreport todir = " ${TESTS.dir} " >
< fileset dir = " ${TESTS.dir} " >
< include name = " TEST-*.xml " />
</ fileset >
< report format = " frames " todir = " ${TESTS.dir}/html " />
</ junitreport >
</ target >
< target name = " compile " >
< mxmlc file = " ${basedir}/src/Main.mxml " output = " ${DEPLOY.dir}/output.swf " failonerror = " true " maxmemory = " 1024m " >
< source-path path-element = " ${basedir}/src " />
</ mxmlc >
</ target >
</ project >Не забудьте добавить
AIRCIListenerв ваш экземплярFlexUnitCore.
<? xml version = " 1.0 " ?>
< project name = " swf example " default = " main " basedir = " . " >
< taskdef resource = " flexTasks.tasks " classpath = " ${FLEX_HOME}/ant " />
< taskdef resource = " flexUnitTasks.tasks " >
< classpath >
< fileset dir = " <path_to_flex_unit_ant_tasks_dir> " >
< include name = " flexUnitTasks*.jar " />
</ fileset >
</ classpath >
</ taskdef >
< property name = " DEPLOY.dir " value = " ${basedir}/bin " />
< property name = " TESTS.dir " value = " ${basedir}/tests-output " />
< target name = " main " depends = " clean, tests, compile " />
< target name = " clean " >
< delete dir = " ${DEPLOY.dir} " />
< mkdir dir = " ${DEPLOY.dir} " />
< delete dir = " ${TESTS.dir} " />
< mkdir dir = " ${TESTS.dir} " />
</ target >
< target name = " test " >
< mxmlc file = " ${basedir}/src/tests.as " output = " ${TESTS.dir}/tests.swf " configname = " air " failonerror = " true " verbose-stacktraces = " true " >
< library-path dir = " ${basedir}/libs " includes= " * " append= " true " />
< library-path dir = " ${FLEX_HOME} " append= " true " >
< include name = " frameworks/libs " />
</ library-path >
< library-path dir = " ${FLEX_HOME} " append = " true " >
< include name = " frameworks/libs/air " />
</ library-path >
</ mxmlc >
< copy file = " ${basedir}/src/tests-app.xml " todir = " ${TESTS.dir} " overwrite = " true " />
< replace file = " ${TESTS.dir}/tests-app.xml " token = " [This value will be overwritten by Flash Builder in the output app.xml] " value = " tests.swf " />
< flexunit
player= " air "
swf= " ${TESTS.dir}/tests.swf "
toDir= " ${TESTS.dir} "
haltonfailure= " false " failureproperty = " flexunit.failure "
verbose= " true " />
< junitreport todir = " ${TESTS.dir} " >
< fileset dir = " ${TESTS.dir} " >
< include name = " TEST-*.xml " />
</ fileset >
< report format = " frames " todir = " ${TESTS.dir}/html " />
</ junitreport >
</ target >
< target name = " compile " >
< mxmlc file = " ${basedir}/src/Main.as " output = " ${DEPLOY.dir>/output.swf " configname = " air " failonerror = " true " >
< library-path dir = " ${FLEX_HOME} " append = " true " >
< include name = " frameworks/libs " />
</ library-path >
< library-path dir = " ${FLEX_HOME} " append = " true " >
< include name = " frameworks/libs/air " />
</ library-path >
</ mxmlc >
</ target >
</ project >...
< target name = " pack " >
< copy file = " ${basedir}/src/swf2png-app.xml " todir = " ${DEPLOY.dir} " overwrite = " true " />
< replace file = " ${DEPLOY.dir}/swf2png-app.xml " token = " [This value will be overwritten by Flash Builder in the output app.xml] " value = " swf2png.swf " />
< exec executable = " ${FLEX_HOME}/bin/adt.bat " failonerror = " true " >
< arg line = " -package " />
< arg line = " -storetype pkcs12 " />
< arg line = " -keystore ${basedir}/certificate.p12 " />
< arg line = " -storepass <password> " />
< arg line = " ${DEPLOY.dir}/swf2png.air " />
< arg line = " ${DEPLOY.dir}/swf2png-app.xml " />
< arg line = " -C ${DEPLOY.dir} swf2png.swf " />
</ exec >
</ target >
...Создайте ASDOC до Temp Dir и обновите файл .SWC с ним.
...
< target name = " asdoc " >
< tempfile property = " temp.dir " destDir = " ${java.io.tmpdir} " prefix = " ${ant.project.name}-doc-xml- " />
< asdoc output = " ${temp.dir} " lenient = " true " failonerror = " true " keep-xml = " true " skip-xsl = " true " fork = " true " >
< compiler .source-path path-element = " ${basedir}/src " />
< doc-sources path-element = " ${basedir}/src " />
</ asdoc >
< zip destfile = " ${DEPLOY.dir}/${ant.project.name}.swc " update = " true " >
< zipfileset dir = " ${temp.dir}/tempdita " prefix = " docs " >
< include name = " *.* " />
< exclude name = " ASDoc_Config.xml " />
< exclude name = " overviews.xml " />
</ zipfileset >
</ zip >
< delete dir = " ${temp.dir} " failonerror = " false " includeEmptyDirs = " true " />
</ target >
...FlexPMD является анализатором исходного кода. Он находит общие недостатки программирования, такие как неиспользованные переменные, пустые блоки подъема, ненужное создание объектов и так далее.
Чтобы сгенерировать pmd_ruleset.xml , используйте онлайн -создатель набора правил PMD.
Ссылка на быструю загрузку: Adobe Flexpmd 1.3
...
< property name = " FLEXPMD.dir " value = " ~/sdks/flexpmd " />
< property name = " FLEXPMD.version " value = " 1.3 " />
< taskdef name = " flexPmd "
classname = " com.adobe.ac.pmd.ant.FlexPmdAntTask "
classpath = " ${FLEXPMD.dir}/flex-pmd-ant-task-${FLEXPMD.version}.jar " >
< classpath >
< pathelement location = " ${FLEXPMD.dir}/flex-pmd-ruleset-api-${FLEXPMD.version}.jar " />
< pathelement location = " ${FLEXPMD.dir}/flex-pmd-ruleset-${FLEXPMD.version}.jar " />
< pathelement location = " ${FLEXPMD.dir}/flex-pmd-core-${FLEXPMD.version}.jar " />
< pathelement location = " ${FLEXPMD.dir}/as3-plugin-utils-${FLEXPMD.version}.jar " />
< pathelement location = " ${FLEXPMD.dir}/as3-parser-api-${FLEXPMD.version}.jar " />
< pathelement location = " ${FLEXPMD.dir}/as3-parser-${FLEXPMD.version}.jar " />
< pathelement location = " ${FLEXPMD.dir}/pmd-4.2.5.jar " />
< pathelement location = " ${FLEXPMD.dir}/commons-lang-2.4.jar " />
< pathelement location = " ${FLEXPMD.dir}/flex-pmd-files-${FLEXPMD.version}.jar " />
< pathelement location = " ${FLEXPMD.dir}/flex-pmd-metrics-${FLEXPMD.version}.jar " />
< pathelement location = " ${FLEXPMD.dir}/plexus-utils-1.0.2.jar " />
< pathelement location = " ${flexpmd.libs}/dom4j-1.6.1.jar " />
</ classpath >
</ taskdef >
< taskdef name = " flexCpd "
classname = " com.adobe.ac.cpd.ant.FlexCpdAntTask "
classpath = " ${FLEXPMD.dir}/flex-pmd-cpd-ant-task-${FLEXPMD.version}.jar " >
< classpath >
< pathelement location = " ${FLEXPMD.dir}/flex-pmd-files-${FLEXPMD.version}.jar " />
< pathelement location = " ${FLEXPMD.dir}/flex-pmd-cpd-${FLEXPMD.version}.jar " />
< pathelement location = " ${FLEXPMD.dir}/as3-plugin-utils-${FLEXPMD.version}.jar " />
< pathelement location = " ${FLEXPMD.dir}/as3-parser-api-${FLEXPMD.version}.jar " />
< pathelement location = " ${FLEXPMD.dir}/as3-parser-${FLEXPMD.version}.jar " />
< pathelement location = " ${FLEXPMD.dir}/pmd-4.2.5.jar " />
</ classpath >
</ taskdef >
...
< target name = " flexPmd " >
< flexPmd
sourceDirectory = " ${basedir} "
outputDirectory = " ${DEPLOY.dir} "
ruleSet = " ${basedir}/pmd_ruleset.xml " />
</ target >
< target name = " flexCpd " >
< flexCpd
minimumTokenCount = " 50 "
outputFile = " ${DEPLOY.dir}/cpd.xml " >
< fileset dir = " ${basedir} " >
< include name = " **/*.as " />
< include name = " **/*.mxml " />
< exclude name = " vendor/** " />
</ fileset >
</ flexCpd >
</ target >
... Не повторяйте себя, используйте ${ant.project.name} как можно увидеть в примере 15 - генерируя asdoc.
Когда вы запускаете свои тесты FlexUnit на машине CI, и любой тест выходит из строя, ваша сборка заканчивается. Но это заканчивается до генерации отчетов, поэтому ваша статистика не может быть обновлена, и вы не знаете, какой тест не удается и почему. Поэтому задача FlexUnit предлагает failureproperty :
...
< target name = " test " >
< mxmlc file = " ${basedir}/src/tests.mxml " output = " ${TESTS.dir}/tests.swf " failonerror = " true " verbose-stacktraces = " true " >
< source-path path-element = " ${basedir}/src " />
< library-path dir = " ${basedir}/libs " includes = " * " append = " true " />
</ mxmlc >
< flexunit
swf= " ${TESTS.dir}/tests.swf "
toDir= " ${TESTS.dir} "
haltonfailure= " false " failureproperty = " flexunit.failure "
verbose= " true "
localTrusted= " true "
command= " ${FLEX_HOME}/runtimes/player/11.4/win/FlashPlayerDebugger.exe " />
< junitreport todir = " ${TESTS.dir} " >
< fileset dir = " ${TESTS.dir} " >
< include name = " TEST-*.xml " />
</ fileset >
< report format = " frames " todir = " ${TESTS.dir}/html " />
</ junitreport >
< fail if = " flexunit.failure " message = " Unit test(s) failed. See reports! " />
</ target >
...Эта работа лицензирована по международной лицензии Creative Commons Attribution-Noncommercial 4.0