Flexmojos. Сторонние swc, форк Develar

Ну продолжим :)

Подключаем сторонние swc

Это, конечно, клево, что у нас все так круто и повсюду артефакты. И теперь для нас поднять проект -- плевое дело. Но вот нюанс -- не всякая swc -- артефакт. Постоянно возникает необходимость подключить, например, Mate-фреймворк, какой-нибудь Papervision или еще что-нибудь в этом роде.

А то еще бывает, что и fla файлы водятся в проекте. И там какая-нибудь анимация или ресурсы. И оно компилится в swc, которое хотелось бы подключить.

На сей счет есть три способа, два из которых я пробовал, а об одном слыхал.

Для начала простой способ "в лоб" -- сгенерить из swc артефакт, положить в репозиторий, чтобы можно было прописывать зависимости от него. Делается это из консоли следующим образом:

mvn install:install-file \
-Dfile=Mate_08_9.swc \
-DgroupId=com.asfusion.mate \
-DartifactId=mate \
-Dversion=08_9 \
-Dpackaging=swc \
-DgeneratePom=true 

Все бы хорошо, но есть одно неудобство -- это нужно повторить каждому разработчику на своей машине. И это слегка усложняет такой красивый и простой способ подымания проекта с нуля.

Другой способ -- использовать Nexus и создавать артефакты в его репозитории, а не на локальной машине. Это делается один раз, после чего артефакты сразу доступны всем разработчиком. Но про Nexus позже будет отдельный разговор.

Наконец, третий способ -- использовать attach-artifact-maven-plugin. Его рекомендует Develar, и про него можно прочитать тут. Develar, как обычно, лаконичен, и вам предлагается втыкать в сорцы без особых объяснений.

Между тем, объяснения были бы не лишними. Ибо из сорцов видно, что подключаются pom файлы. А откуда они возьмутся, если у нас изначально swc? Но вы уж меня простите, я не стал разбираться с attach-artifact-maven-plugin, ибо вариант с Nexus меня вполне устроил. Попробуйте сами :)

Чем плох стандартный flexmojos и почему нужно юзать форк Develar?

Некоторые успели заметить, что в стандартном flexmojos не работают транзитивные зависимости. Но, наверное, не все знают, что это такое.

Это очень просто. Допустим у вас есть три модуля: A, B, C . Модуль A зависит от B, модуль B зависит от C . Это прямые зависимости. А вот зависимость А от С -- транзитивная. Конечно, транзитивные зависимости могут быть какой угодно глубокой вложенности.

Maven прекрасно справляется с транизитивными зависимостями. Поэтому в pom-файле модуля A вы указываете зависимость от B, и вовсе не волнуетесь, что еще там тянется вместе с B. Да, так оно в Maven, но не так оно в стандартном Flexmojos. И тут приходится в pom-файле модуля A прописывать все зависимости, в том числе и транзитивные, любой вложенности.

Очевидно, что это не тру. Одной этой причины достаточно, чтобы использовать форк Develar, где данная проблема решена. Но у Develar имеются и другие фичи.

Если вы обратите внимание на размер swc файла, скомпилированного стандартным flexmojos, то заметите, что он велик. Ага, подумаете вы, там просто вкомпилены классы из других модулей и весь флекс-фреймворк. Всего-то нужно поставить external, и проблема решена. Вы это попробуете, и увидите, что размер swc файла чутка уменьшился, но все равно велик. Флекс-фреймворк из него никуда не делся. И хотя это не такая уж большая проблема, но все равно неприятно.

В форке Develar external работает по дефолту, и его не придется явно задавать. И флекс-фреймворк не вкомпиливается в swc файлы. Это тру.

Другие фишки для меня менее важны, ибо связаны с resource bundles (которые мы используем весьма специфично) и с flex sdk 4 (с которым мы еще не работаем). Так что читайте автора в оригинале :)

Подключаем форк Develar

Во-первых, в ~/.m2/settings.xml вместо стандартного репозитория http://repository.sonatype.org/content/groups/flexgroup/ нужно добавить http://repository.flyti.org/ Вероятно это лучше делать в отдельном профиле, как-нибудь так:


<settings>

<profiles>

	<profile>
		<id>flex-mojos</id>
		<repositories>
			<repository>
				<id>flex-mojos-repository</id>

				<url>http://repository.sonatype.org/content/groups/flexgroup/</url>
				<releases> <enabled>true</enabled> </releases>
				<snapshots> <enabled>false</enabled> </snapshots>

			</repository>
		</repositories>
		<pluginRepositories>
			<pluginRepository>
				<id>local</id>

				<url>http://repository.sonatype.org/content/groups/flexgroup/</url>
				<releases> <enabled>true</enabled> </releases>
				<snapshots> <enabled>false</enabled> </snapshots>

			</pluginRepository>
		</pluginRepositories>
	</profile>

	<profile>
		<id>flex-mojos-develar-fork</id>

		<repositories>
			<repository>
				<id>flex-mojos-repository</id>
				<url>http://repository.flyti.org/</url>
				<releases> <enabled>true</enabled> </releases>

				<snapshots> <enabled>false</enabled> </snapshots>
			</repository>
		</repositories>
		<pluginRepositories>

			<pluginRepository>
				<id>local</id>
				<url>http://repository.flyti.org/</url>
				<releases> <enabled>true</enabled> </releases>

				<snapshots> <enabled>false</enabled> </snapshots>
			</pluginRepository>
		</pluginRepositories>
	</profile>

</profiles>

<activeProfiles>
	<activeProfile>flex-mojos-develar-fork</activeProfile>
</activeProfiles>

</settings>

Во-вторых, нужно указывать другую версию flexmojos-maven-plugin в ваших pom-файлах. Вместо версии 3.5.0 пишем 3.5-de3. Будет выглядеть так:


<build>
<pluginManagement>
<plugins>
<plugin>
	<groupId>org.sonatype.flexmojos</groupId>

	<artifactId>flexmojos-maven-plugin</artifactId>
	<version>3.5-de3</version>
	<extensions>true</extensions>
</plugin>

</plugins>
</pluginManagement>
</build>

Вот и все, теперь можно повыкидывать из pom лишние зависимости, которые вам пришлось туда напихать.

Comments

Скажите пожалуйста, актуально ли разбираться еще с форком develara или с четвертой версии flexmojos в этом уже нет необходимости ? И если да то какую версию форка пользовать с мавеном третьим ?

yzh44yzh's picture

Сейчас разницы между ними стало меньше, но у форка остаются свои фишки.

Я, однако, перешел на стандартную ветку.

Не подскажете каким образом теперь нужно встраивать ресурсы на этапе компиляции по относительным ссылкам. Во FD была возможность клинуть правой кнопкой мыши и выбрать:'Insert into document', есть ли что-то аналогичное в Idea ?!

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
question for bots )
Image CAPTCHA
Enter the characters shown in the image.