Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide
Consultez :
  • Les documents de reference sur le projet original
  • Les sources de la traduction fr sur GitHub
  • maven


    13.3.3. Creation d'un projet multimodule : Une application web avec une dépendance Flex

    La ligne de commande suivante crée un projet multimodule contenant un projet de bibliothèque Flex référencée par une application Flex qui elle-même est référencée par une application web :

    $ mvn archetype:generate \
      -DarchetypeRepository=http://repository.sonatype.org/content/groups/public\
      -DarchetypeGroupId=org.sonatype.flexmojos \
      -DarchetypeArtifactId=flexmojos-archetypes-modular-webapp \
      -DarchetypeVersion=3.5.0
    [INFO] Scanning for projects...
    [INFO] Searching repository for plugin with prefix: 'archetype'.
    [INFO] com.sonatype.maven.plugins: checking for updates from central
    ...
    [INFO] [archetype:generate]
    [INFO] Generating project in Interactive mode
    [INFO] Archetype defined by properties
    ...
    Define value for groupId: : org.sonatype.test
    Define value for artifactId: : sample-multimodule
    Define value for version:  1.0-SNAPSHOT: : 1.0-SNAPSHOT
    Define value for package:  org.sonatype.test: : org.sonatype.test 
    Confirm properties configuration:
    groupId: org.sonatype.test
    artifactId: sample-library
    version: 1.0-SNAPSHOT
    package: org.sonatype.test
     Y: : Y
    [INFO] Parameter: groupId, Value: org.sonatype.test
    [INFO] Parameter: packageName, Value: org.sonatype.test
    [INFO] Parameter: basedir, Value: /Users/Tim
    [INFO] Parameter: package, Value: org.sonatype.test
    [INFO] Parameter: version, Value: 1.0-SNAPSHOT
    [INFO] Parameter: artifactId, Value: sample-multimodule
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESSFUL
    

    Si vous regardez dans le répertoire sample-multimodule/, vous verrez une arborescence qui contient trois projets swc, swf et war.

    Arborescence de fichiers issue de l'archétype multimodule Flex

    Figure 13.6. Arborescence de fichiers issue de l'archétype multimodule Flex


    Le POM parent du projet multimodule est simple comme vous pouvez le voir ci-dessous. Il est constitué de références aux modules swc, swf et war.

    Exemple 13.10. POM parent produit par l'archétype multimodule Flex

    <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 
                         http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>org.sonatype.test</groupId>
      <artifactId>sample-multimodule</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>pom</packaging>
      
      <modules>
        <module>swc</module>
        <module>swf</module>
        <module>war</module>
      </modules>
    </project>
    

    Le projet swc a un POM simple qui ressemble au POM illustré dans l'Exemple 13.4, « POM d'un archétype pour projet de bibliothèque Flex ». Notez que l'artifactId de ce POM ne reflète pas le nom du module mais est swc-swc.

    Exemple 13.11. POM du module swc

    <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
                           http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <parent>
        <groupId>org.sonatype.test</groupId>
        <artifactId>sample-multimodule</artifactId>
        <version>1.0-SNAPSHOT</version>
      </parent>
    
      <groupId>org.sonatype.test</groupId>
      <artifactId>swc</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>swc</packaging>
    
      <name>swc Library</name>
    
      <build>
        <sourceDirectory>src/main/flex</sourceDirectory>
        <testSourceDirectory>src/test/flex</testSourceDirectory>
        <plugins>
          <plugin>
            <groupId>org.sonatype.flexmojos</groupId>
            <artifactId>flexmojos-maven-plugin</artifactId>
            <version>3.5.0</version>
            <extensions>true</extensions>
            <configuration>
              <locales>
                <locale>en_US</locale>
              </locales>
            </configuration>
          </plugin>
        </plugins>
      </build>
    
      <dependencies>
        <dependency>
          <groupId>com.adobe.flex.framework</groupId>
          <artifactId>flex-framework</artifactId>
          <version>3.2.0.3958</version>
          <type>pom</type>
        </dependency>
    
        <dependency>
          <groupId>com.adobe.flexunit</groupId>
          <artifactId>flexunit</artifactId>
          <version>0.85</version>
          <type>swc</type>
          <scope>test</scope>
        </dependency>
      </dependencies>
    
      <profiles>
        <profile>
          <id>m2e</id>
          <activation>
            <property>
              <name>m2e.version</name>
            </property>
          </activation>
          <build>
            <plugins>
              <plugin>
                <groupId>org.maven.ide.eclipse</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>0.9.9-SNAPSHOT</version>
                <configuration>
                  <mappingId>customizable</mappingId>
                  <configurators>
                    <configurator
          id="org.maven.ide.eclipse.configuration.flex.configurator" />
                  </configurators>
                  <mojoExecutions>
                    <mojoExecution>
                      org.apache.maven.plugins:maven-resources-plugin::
                    </mojoExecution>
                  </mojoExecutions>
                </configuration>
              </plugin>
            </plugins>
            <pluginManagement>
              <plugins>
                <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-resources-plugin</artifactId>
                  <version>2.4</version>
                </plugin>
              </plugins>
            </pluginManagement>
          </build>
        </profile>
      </profiles>
    
    </project>
    

    Le POM du module swf est semblable au POM de l'Exemple 13.7, « POM généré par l'archétype Application Flex » avec une dépendance vers l'artefact swc-swc en plus. Notez que l'artifactId de ce POM ne reflète pas le nom du répertoire qui contient le module ; l'artifactId dans le POM ci-dessous est swf-swf.

    Exemple 13.12. POM du module swf

    <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
                          http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <parent>
        <groupId>org.sonatype.test</groupId>
        <artifactId>sample-multimodule</artifactId>
        <version>1.0-SNAPSHOT</version>
      </parent>
    
      <groupId>org.sonatype.test</groupId>
      <artifactId>swf</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>swf</packaging>
    
      <name>swf Application</name>
    
      <build>
        <sourceDirectory>src/main/flex</sourceDirectory>
        <testSourceDirectory>src/test/flex</testSourceDirectory>
        <plugins>
          <plugin>
            <groupId>org.sonatype.flexmojos</groupId>
            <artifactId>flexmojos-maven-plugin</artifactId>
            <version>3.5.0</version>
            <extensions>true</extensions>
            <configuration>
              <locales>
                <locale>en_US</locale>
              </locales>
            </configuration>
          </plugin>
        </plugins>
      </build>
    
      <dependencies>
        <dependency>
          <groupId>com.adobe.flex.framework</groupId>
          <artifactId>flex-framework</artifactId>
          <version>3.2.0.3958</version>
          <type>pom</type>
        </dependency>
    
        <dependency>
          <groupId>com.adobe.flexunit</groupId>
          <artifactId>flexunit</artifactId>
          <version>0.85</version>
          <type>swc</type>
          <scope>test</scope>
        </dependency>
    
        <dependency>
          <groupId>org.sonatype.test</groupId>
          <artifactId>swc</artifactId>
          <version>1.0-SNAPSHOT</version>
          <type>swc</type>
        </dependency>
      </dependencies>
    
      <profiles>
        <profile>
          <id>m2e</id>
          <activation>
            <property>
              <name>m2e.version</name>
            </property>
          </activation>
          <build>
            <plugins>
              <plugin>
                <groupId>org.maven.ide.eclipse</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>0.9.9-SNAPSHOT</version>
                <configuration>
                  <mappingId>customizable</mappingId>
                  <configurators>
                    <configurator
          id="org.maven.ide.eclipse.configuration.flex.configurator" />
                  </configurators>
                  <mojoExecutions>
                    <mojoExecution>
                      org.apache.maven.plugins:maven-resources-plugin::
                    </mojoExecution>
                  </mojoExecutions>
                </configuration>
              </plugin>
            </plugins>
            <pluginManagement>
              <plugins>
                <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-resources-plugin</artifactId>
                  <version>2.4</version>
                </plugin>
              </plugins>
            </pluginManagement>
          </build>
        </profile>
      </profiles>
    
    </project>

    Quand vous déclarez une dépendance vers un SWC, vous devez préciser le type de dépendance afin que Maven puisse localiser les artefacts adéquats dans le dépôt distant ou local. Dans ce cas, le projet swf-swf dépend du SWC produit par le projet swc-swc. Quand vous ajoutez la dépendance au projet swf-swf, le plugin FlexMojos ajoutera le fichier SWC approprié dans le chemin des bibliothèques de compilation Flex.

    Maintenant, jetez un coup d'oeil dans le POM simple du module war.

    Exemple 13.13. POM du module war

    <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
                          http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <parent>
            <artifactId>sample-multimodule</artifactId>
            <groupId>org.sonatype.test</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
    
      <groupId>org.sonatype.test</groupId>
      <artifactId>war</artifactId>
      <version>1.0-SNAPSHOT</version>
    
    <packaging>war</packaging>
      <build>
        <plugins>
          <plugin>
            <groupId>org.sonatype.flexmojos</groupId>
            <artifactId>flexmojos-maven-plugin</artifactId>
            <version>3.5.0</version>
            <executions>
              <execution>
                <goals>
                  <goal>copy-flex-resources</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.17</version>
          </plugin>
        </plugins>
      </build>
    
    <dependencies>
      <dependency>
        <groupId>org.sonatype.test</groupId>
        <artifactId>swf</artifactId>
        <version>1.0-SNAPSHOT</version>
        <type>swf</type>
      </dependency>
    </dependencies>
    
    </project>

    Avertissement

    Dans l'Exemple 13.13, « POM du module war », la dépendance vers "war-swf" doit être remplacée par "swf-swf". C'est un bug dans l'archétype multimodule Flex qui est présent dans la version 3.5.0 de FlexMojos. Il sera corrigé dans la version FlexMojos 3.2.0.

    Le POM illustré dans l'Exemple 13.13, « POM du module war » configure le plugin FlexMojos pour exécuter le goal copy-flex-resources pour ce projet. Le goal copy-flex-resources copiera l'application SWF à la racine de l'application web. Dans ce projet, l'exécution du build et la production du WAR copieront le fichier swf-swf-1.0-SNAPSHOT.swf dans le répertoire racine de l'application web target/war-war-1.0-SNAPSHOT.

    Pour construire l'application web multimodule, exécutez mvn install depuis le répertoire racine. Ceci doit générer les artefacts swc-swc, swf-swf et war-war et produire le fichier WAR /target/war-war-1.0-SNAPSHOT.war qui contient le swf-swf-1.0-SNAPSHOT.swf à la racine de l'application web.

    Note

    Pour pouvoir exécuter les tests unitaires Flex, il vous faudra configurer votre variable d'environnement PATH afin d'inclure le lecteur Flash Player. Pour plus d'information concernant la configuration de FlexMojos pour les tests unitaires, se référer à la Section 13.2.2, « Configuration de l'environnement pour les tests Flex Unit ».