2009-09-27 7 views
3

J'ai eu du mal à faire coopérer Maven2 avec moi, et je me demandais si quelqu'un avait des idées sur la façon de le faire fonctionner ... Je travaille sur un projet Flash, et nous envisagent de passer de notre Flex4/FlashCS4 hybride à une solution Flex4 pure. Nous aimerions utiliser le système de construction Maven2, afin que nos développeurs n'aient pas à télécharger, installer et configurer manuellement Flex4 sur leurs machines.Complexe Maven2 avec configuration Flex4

J'ai réussi à créer un projet mono-module en utilisant Maven2 avec Flex4 (j'utilise le Plugin Sonatype FlexMojos et leur référentiel Maven2 situé au http://repository.sonatype.org/content/groups/flexgroup/). Je commence vraiment courir des ennuis quand il vient à faire de ce multimodule ....

Notre projet est organisé comme suit:

 
|- bin 
| |- moduleX.swf 
| |- moduleY.swf 
| |- ... 
|- lib 
| |- moduleA.swc 
| |- moduleB.swc 
| |- ... 
|- src 
| |- moduleA 
| |- moduleB 
| |- ... 
|- test 
| |- moduleA 
| |- moduleB 
| |- ... 
|- share 
| |- asset1 
| |- asset2 
| |- ... 
|- ... 

En fait, chacun de nos modules a ses sources situées sous « src/<modulename>/"et ses sources de test situées sous" test/<modulename>/", les fichiers SWF générés étant placés dans" bin "et les fichiers SWC générés étant placés dans" lib ". Nos assets (choses que nous aimerions pouvoir référencer en utilisant les balises "@Embed" ou "[Embed]") se trouvent sous "share". J'ai regardé les références sur l'héritage et l'agrégation de projets, mais je n'arrive pas à trouver quelque chose qui nous permettrait de conserver notre structure de répertoire de projet existante. Nous aimerions que cette migration soit aussi rapide, indolore et non perturbatrice que possible. J'apprécierais vraiment si quelqu'un peut comprendre comment créer un fichier "pom.xml" qui nous permet de garder notre infrastructure actuelle.

Répondre

3

Si vous êtes certain de passer à Maven 2, il vous fera économiser beaucoup de douleur pour modifier la structure du projet de sorte que chaque module contient ses propres sources et les tests et suit les conventions Maven.

Si vous ne pouvez vraiment pas faire cela, vous pouvez créer une hiérarchie de modules parallèles, et configurer chaque module avec des chemins relatifs pointant vers votre structure existante. La structure pourrait finir par quelque chose comme ceci:

|- Maven Root 
| |- pom.xml 
| |- ModuleA 
| | |- pom.xml 
| |- ModuleB 
| | |- pom.xml 
| |- ModuleX 
| | |- pom.xml 
| |- ModuleY 
| | |- pom.xml 
| |- asset1 
| | |- pom.xml 
| |-... 
| 
|- Existing-Root 
    |- bin 
    | |- moduleX.swf 
    | |- moduleY.swf 
    | |- ... 
    |- lib 
    | |- moduleA.swc 
    | |- moduleB.swc 
    | |- ... 
    |- src 
    | |- moduleA 
    | |- moduleB 
    |-... 

Vous pouvez également ajouter poms provisoires afin que vous puissiez construire des ensembles connexes (par exemple un share pom contenant tous les modules d'action).

Vous pouvez ensuite:

  • configure chaque pom avec les chemins relatifs appropriés afin qu'il puisse construire ses sources.
  • configurer le maven-dépendance-plugin pour décompresser Embed ressources dans cibles/flex/ressources
  • utiliser le build-helper-maven-plugin pour définir cible/flex/ressources comme lieu de ressources (noter que ce ne peut pas réellement fonctionner, car le plugin attend Intégrer ressources à être dans src/main/ressources)
  • définir les dépendances appropriées entre les modules.
  • pour copier les artefacts définitifs dans le répertoire bin existant (si vous tentez d'utiliser le même répertoire de sortie en définissant project.build.outputDirectory, mais qu'un nettoyage d'un module entraînera la destruction d'autres versions).

Voici un exemple de configuration pour atteindre ces étapes pour l'une des poms:

<build> 
    <!--configure the source and test sources to point to the existing structure--> 
    <sourceDirectory> 
    ${baseDir}/../../Existing-Root/test/${project.artifactId} 
    </sourceDirectory> 
    <testSourceDirectory> 
    ${baseDir}/../../Existing-Root/src/${project.artifactId} 
    </testSourceDirectory> 
    <plugins> 
    <plugin> 
    <groupId>org.sonatype.flexmojos</groupId> 
    <artifactId>flexmojos-maven-plugin</artifactId> 
    <version>3.2.0</version> 
    <extensions>true</extensions> 
    </plugin> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <executions> 
     <execution> 
      <id>unpack</id> 
      <phase>generate-resources</phase> 
      <goals> 
      <goal>unpack</goal> 
      </goals> 
      <configuration> 
      <artifactItems> 
       <!--unpack asset1 to target/flex/resources, 
       define any additional artifacts for other shares--> 
       <artifactItem> 
       <groupId>my.group.id</groupId> 
       <artifactId>asset1</artifactId> 
       <version>1.0.0</version> 
       <type>swf</type> 
       </artifactItem> 
      </artifactItems> 
      <outputDirectory> 
       ${project.build.directory}/flex/resources 
      </outputDirectory> 
      <overWriteReleases>false</overWriteReleases> 
      <overWriteSnapshots>true</overWriteSnapshots> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    <plugin> 
     <!--add target/flex/resources as a resource location--> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.3</version> 
     <executions> 
     <execution> 
      <id>add-resource</id> 
      <phase>generate-resources</phase> 
      <goals> 
      <goal>add-resources</goal> 
      </goals> 
      <configuration> 
      <resources> 
       <resource> 
       <directory> 
        ${project.build.directory}/flex/resources 
       </directory> 
       </resource> 
      </resources> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
     <execution> 
      <phase>pre-integration-test</phase> 
      <configuration> 
      <tasks> 
       <!--copy the final artifact to the module's bin directory--> 
       <copy 
       file="${project.artifactId}-${project.version}.${project.packaging}" 
       todir="${baseDir}/../../Existing-Root/bin/${project.artifactId}"/> 
      </tasks> 
      </configuration> 
      <goals> 
      <goal>run</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
    ... 
</build> 
+0

Merci, c'était un article très détaillé. J'ai hâte de l'essayer. –

0

Un projet multi-module devrait ressembler à ce

Root 
|- Module a 
| |- src 
|- Module b 
| |- src 
|- Module c 
| |- src 

sources multiples dans un seul projet est très bien si vous envisagez de construire un seul artefact, mais Maven ne coopérez pas si vous essayez de construire plusieurs artefacts provenant de plusieurs sources dans un seul projet.

Si vous ne pouvez pas déplacer l'arborescence source; créer une hiérarchie pom multi-module dans la structure actuelle et éditer les nouveaux poms-fils pour pointer leurs répertoires src et test vers les répertoires src et test de la hiérarchie source actuelle.

Vous pouvez également avoir les dossiers de sortie sur le même dossier.

root 
|- ModuleA 
| |- pom.xml, src points to root/src/moduleA 
|- ModuleB 
| |- pom.xml, src points to root/src/moduleB 
|- src 
| |- moduleA 
| |- moduleB 
| |- ... 
|- test 
| |- moduleA 
| |- moduleB 
+0

C'est l'impression que je reçois de la documentation ... J'espérais peut-être là une sorte de solution de contournement . –