Плохой тул постоянно напоминает о себе, требует, чтобы ты для него что-то сделал, в чем-то разобрался, где-то подкрутил. Плохой тул капризен и ревнив. Он не любит, чтобы про него забывали. Он любит внимание и заботу.
Удобный тул не мешает работать. Идельный тул вообще не заметен. Одажды настроил и забыл про него.
Мавен может быть плохим тулом, а может быть удобным. Это зависит от степени просветления. А степень просветления зависит от деталей и мелких нюансов, о которых и узнаешь как-то случайно.
Сейчас мы сделаем еще один шаг к просветлению :)
Итак, одна из самых важных фич мавен, если использовать его в комплекте с Intellij IDEA, это то, что в IDEA проект не нужно настраивать. Не нужно создавать модули, указывать source path, каталог для тестов, зависимости, опции компилятора и т.д. -- все это IDEA сделает сама. Но как это происходит?
Подымаем проект из репозитория и просим IDEA открыть корневой pom.xml как проект. IDEA создает проект, модули в нем, подхватывает src и test каталоги, зависимости от flex sdk. Затем нужно попросить мавен, чтобы он сгенерировал flex-config файлы для каждого модуля. Мавен это делает и кладет их в project/module/target/ Это именно такие flex-config файлы, которые нужны mxmlc компилятору, чтобы собрать проект. Отсюда IDEA берет разные нюансы, вроде параметров условной компиляции, output каталог и прочее.
После этого проект можно собирать обычным билдом, запускать, дебажить и т.д.
Нюанс же состоит в том, как именно просить мавен генерировать flex config. Все это время я использовал опцию configurationReport, которую прописывал в pom модуля:
<build>
<plugins>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<configuration>
<configurationReport>true</configurationReport>
</configuration>
</plugin>
</plugins>
</build>
Но это было неправильно :)
При такой настройке генерация конфигов происходила при выполнении цели install. При этом генерировался flex-config, в котором указывались зависимости от swc библиотек с путями, ведущими в локальный репозиторий:
<external-library-path>
<path-element>/home/yura/.m2/repository/path/lib1.swc</path-element>
<path-element>/home/yura/.m2/repository/path/lib2.swc</path-element>
<path-element>/home/yura/.m2/repository/path/libN.swc</path-element>
<external-library-path>
Если у вас в проекте есть moduleA, который компилируется в библиотеку libA.swc, и moduleB, который использует эту библиотеку, то в настройках moduleB прописывается зависимость от /home/yura/.m2/repository/path/libA.swc
Дальше мы работаем над проектом, редактируем код в moduleA, запускаем билд, и -- бац, изменения в коде не подхватываются. Как же так? Мы же видим в консоли, что moduleA перекомпилирован. Ага, и при этом обновился файл project/moduleA/target/libA.swc А у moduleB зависимость не от этого файла, а от /home/yura/.m2/repository/path/libA.swc. И что же нужно сделать, чтобы обновилась библиотека в локальном репозитории? Нужно запустить mvn install для moduleA.
Вот какая фигня выходит -- каждый раз, когда мы изменяем код в moduleA, нам приходится сперва запускать mvn install для модуля, а потом билд проекта. И это, конечно, весьма неприятное неудобство.
А вот если бы зависимость moduleB в flex-config была прописана как project/moduleA/target/libA.swc, то билд проекта работал бы без проблем, сразу подхватывая все изменения.
Так вот, правильный вариант -- не прописывать
mvn compile -DconfigurationReport=true
И тогда мы получим правильные конфиги:
<external-library-path>
<path-element>/project/module1/target/lib1.swc</path-element>
<path-element>/project/module2/target/lib2.swc</path-element>
<path-element>/project/moduleN/target/libN.swc</path-element>
<external-library-path>
Сделать это нужно один раз при настройке проекта, а потом можно забыть про мавен и спокойно пользоваться билдом.
Ну а те, кто испытывает ужас от работы с консолью и предпочитают не выходить за пределы любимой IDE, могут воспользоваться Ant-скриптом:
<?xml version="1.0" encoding="UTF-8"?>
<project name="Confgurate Project" default="main" basedir="./">
<target name="main">
<exec executable='mvn'>
<arg value='compile'/>
<arg value='-DconfigurationReport=true'/>
</exec>
</target>
</project>
Ну вот, пусть машина работает, а мы будем пить чай и постигать непознанную истину :)

Фраза вводит в заблуждение и очень неправильна
коммент не мой, а @develar
Первый момент — "При такой настройке генерация конфигов происходила при выполнении цели install." Фраза вводит в заблуждение и очень неправильна — в приведенной листинге кода данная конфигурация будет передана для любого заклинания flexmojos при любой цели (а не только для заклинаний compile-swc compile-swf для цели install). Как вы можете заметить, в моем super POM для моего форка (а я могу написать нормальный POM в отличие от Марвина, ибо мой форк поддерживает транзитивность) есть профиль для этого IDEBuilder (так исторически Далее, "кто испытывает ужас от работы с консолью и предпочитают не выходить за пределы любимой IDE". Ребята, IntelliJ IDEA написали зайцы из Jetbrains и по уровню комфорта данная среда также прекрасна как Mac OS X — для означенной задачи подойдет maven runner (или сами его создаете, или он может быть создан на лету через контекстное меню открываемое в панели Maven Projects -> Lifecycle или Maven Projects -> Plugins -> flexmojos) — в гробу там этот ANT нужен.