« Flex-Mojos. Пример сборки flex modules.Flex-Mojos, Управление зависимостями. »

Flex-Mojos. Пример сборки модульного проекта.

Глоссарий

flex module - swf, которая может быть загружена или выгружена flex приложением. Она не может быть запущена независимо. Несколько приложений могут использовать один и тотже модуль.(как собирать flex модули я опишу в следующей статье)
maven module - логическая часть вашего проекта, например клиентские программы, библиотеки, серверные модули, модули конфигурации и т.п.

Введение

Рассмотрим сборку проекта состоящего их нескольких maven модулей. Для построения такого проекта нам потребуется, создать иерархическую структуру директорий, для каждого модуля своя директория, в каждой директории будет находиться исходный код модуля и роm.xml, который его собирает. В корневой директории будет находится родительский pom для всего проекта.

Структура проекта

картинка

Проект состоит из двух модулей:
корень проекта:
multyModulesProject/pom.xml - родительский роm.xml
flex библиотека:
multyModulesProject/flexCoreLibrary/pom.xml;
multyModulesProject/flexCoreLibrary/…;
flex приложение:
multyModulesProject/flexClient/pom.xml;
multyModulesProject/flexClient/…;

Наследование от flex-super-pom

Это достаточно тонкий момент. Возможны следующий решения:

  • Унаследовать родительский pom от flex-super-pom. При данном решении возникает вопрос, что делать с модулями которые не имеют отношения к flex.
  • Прописать все необходимые свойства непосредственно в дочерние модули. Приводит к излишнему дублированию кода.
  • Создать ещё один уровень иерархии. С модулями flex и java например. В модуле flex будет находиться my-flex-super-pom. Наследуется от родительского pom всего проекта и включает все необходимые параметры из flex-super-pom. Все maven модули собирающие flex, наследуются от my-flex-super-pom и помещаются в директорию flex. Недостаток данного метода в появлении ещё одного уровня иерархии.
  • И последний вариант, который я использую: Появляется модуль flex и my-flex-super-pom, как в предыдущем решении, но не создается иерархия. Все модули помещаются в корневую директорию. Модули собирающие flex артифакты наследуются от my-flex-super-pom. Сложность здесь в некоторой путанице с наследованием. Она не всегда совпадает с директориями, в которых находятся модули.

В итоге к нашему проекту добавился ешё один модуль flex.
multyModulesProject/flex/pom.xml; - по умолчанию полностью повторяет структуру flex-super-pom, но наследуется от родительского pom.

Родительский pom проекта

Родительский pom.xml нашего проекта может выглядеть следующим образом:

XML:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mydomain.mypackage</groupId>
    <artifactId>myProjectArtifactId</artifactId>
    <name>myProjectName</name>
    <packaging>pom</packaging>
    <version>1.0</version>
    <url>http://maven.apache.org</url>
    <modules>
        <module>flex</module>
        <module>flexCoreLibrary</module>
        <module>flexClient</module>
    </modules>
            <repositories>
                  <repository>
                          <id>flex-mojos-repository</id>
                          <url>http://svn.sonatype.org/flexmojos/repository/</url>
                          <releases>
                                  <enabled>true</enabled>
                          </releases>
                  </repository>
      </repositories>
  
      <pluginRepositories>
 
          <pluginRepository>
            <id>flex-mojos-repository</id>
            <url>http://svn.sonatype.org/flexmojos/repository/</url>
            <releases>
              <enabled>true</enabled>
            </releases>
            <snapshots>
              <enabled>false</enabled>
            </snapshots>
          </pluginRepository>
        </pluginRepositories>
</project>

На что стоит обратить внимание:

XML:

<packaging>pom</packaging>

определяет тип собираемого артефакта, в данном случае pom.xml, оперирует другими pom.xml. Тип родительского модуля логический, обозначается “pom".

XML:

...
  <modules>
        <module>flex</module>
        <module>flexCoreLibrary</module>
        <module>flexClient</module>
        
  </modules>
...

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

XML:

...
<repositories>
...

тег repositories, выноситься в родительский pom.xml, так как maven поддерживает наследование, то данное свойство будет доступно в дочерних модулях.

Замечу что если у вас несколько проектов, то лучше его вынести в файл конфигурации maven.
под winXP, он находиться в: “C:\Documents and Settings\username\.m2\settings.xml", в других OS в той-же по смыслу директории.

my-flex-super-pom

Находиться в дирректории: multyModulesProject/flex
Отличается от flex-super-pom, добавлением кода определяющего родителя:

XML:

...
     <parent>
       <groupId>com.mydomain.mypackage</groupId>
       <artifactId>myProjectArtifactId</artifactId>
       <version>1.0</version>
    </parent>
...

и другим именем:

XML:

...
    <groupId>com.mydomain.mypackage</groupId>
    <artifactId>my-flex-super-pom</artifactId>
    <version>1.0</version>
    <name>parent pom for building modules with flex</name>
    <packaging>pom</packaging>
...

flex-core-library

Находится в директории: multyModulesProject/flexCoreLibrary:

XML:

<?xml version="1.0"?>
  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 href="http://maven.apache.org/maven-v4_0_0.xsd">">http://maven.apache.org/maven-v4_0_0.xsd">
      <parent>
        <groupId>com.mydomain.mypackage</groupId>
              <artifactId>my-flex-super-pom</artifactId>
              <version>1.0</version>
      </parent>
  
      <modelVersion>4.0.0</modelVersion>
  
      <groupId>com.mydomain.mypackage</groupId>
      <artifactId>flex-core-library</artifactId>
      <packaging>swc</packaging>
      <name>flex-core-library</name>
      <version>1.0</version>
 
  </project>

Тег parent

устанавливает родительский pom. Теперь всё что определено в my-flex-super-pom будет доступно в данном проекте.

flex-client

Находится в директории: multyModulesProject/flexClient

XML:

<?xml version="1.0"?>
  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 href="http://maven.apache.org/maven-v4_0_0.xsd">">http://maven.apache.org/maven-v4_0_0.xsd">
      <parent>
        <groupId>com.mydomain.mypackage</groupId>
              <artifactId>my-flex-super-pom</artifactId>
              <version>1.0</version>
      </parent>
  
      <modelVersion>4.0.0</modelVersion>
  
      <groupId>com.mydomain.mypackage</groupId>
      <artifactId>flex-client</artifactId>
      <packaging>swf</packaging>
      <name>flex client</name>
      <version>1.0</version>
 
            <dependencies>
               <dependency>
                 <groupId>com.mydomain.mypackage</groupId>
            <artifactId>flex-core-library</artifactId>
                  <version>1.0</version>
                  <type>swc</type>
                  <scope>internal</scope>
               </dependency>
            </dependencies>
  </project>

Тег parent

устанавливает родительский pom. Теперь всё что определено в my-flex-super-pom будет доступно в данном проекте.

Тег dependency

определяет зависимость flex-client от flex-core-library

Исходники

исходный код проект

Постоянная ссылка 2008-07-21 22:21:20, от agahov Email , 2027 слов, Рубрики: Flex, maven , 2 комментариев »

2 комментариев

Комментарий от: Konstantin Kovalev [Учаснег] Email · http://riapriority.com/blogs/constantiner.php
Хехе. Отлично. Респект. В мемориз. Очень толково и подробно все описал.
2008-07-22 @ 00:06
Спасибо! Очень приятно получить обратную связь.

2008-07-22 @ 15:50

Оставить комментарий


Ваш email адрес. (Не будет показан на сайте.)

Ваш URL будет показан.
:!: :?: :idea: :) :D :p B) ;) :> :roll: :oops: :| :-/ :( :'( |-| :>> :yes: ;D :P :)) 88| :. :no: XX( :lalala: :crazy: >:XX
(Заменить прерывания строк на <br />)
(Имя, email и сайт)
(Разрешить пользователям посылать вам сообщения (ваш email не отображается).)
3 + 2 + 7 - 1?
antispam test

Вы можете использовать OpenID чтобы предоставить ваше имя, email и url.