3 Stimmen

Komplexe Maven2 mit Flex4 Einrichtung

Ich habe damit gekämpft, Maven2 dazu zu bringen, mit mir zusammenzuarbeiten, und habe mich gefragt, ob irgendjemand da draußen eine Idee hat, wie man das hinbekommt.... Ich arbeite an einem Flash-Projekt, und wir erwägen, von unserer hybriden Flex4/FlashCS4-Lösung zu einer reinen Flex4-Lösung zu wechseln. Wir möchten das Maven2-Build-System verwenden, damit unsere Entwickler Flex4 nicht manuell herunterladen, installieren und auf ihren Rechnern konfigurieren müssen.

Ich habe es geschafft, ein Einzelmodulprojekt mit Maven2 und Flex4 zu erstellen (ich verwende das Sonatype FlexMojos Plugin und das Maven2 Repository, das sich unter http://repository.sonatype.org/content/groups/flexgroup/ ). Ich habe wirklich Probleme, wenn es darum geht, dieses Multimodul zu machen....

Unser Projekt ist wie folgt aufgebaut:

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

Grundsätzlich befinden sich die Quellen jedes unserer Module unter "src/<Modulname>/" und die Testquellen unter "test/<Modulname>/", wobei die generierten SWF-Dateien in "bin" und die generierten SWC-Dateien in "lib" abgelegt werden. Unsere Assets (Dinge, auf die wir mit den Tags "@Embed" oder "[Embed]" verweisen möchten) befinden sich unter "share". Ich habe mir die Verweise auf die Projektvererbung und -aggregation angesehen, kann aber nichts finden, was uns erlauben würde, unsere bestehende Projektverzeichnisstruktur beizubehalten. Wir möchten, dass diese Migration so schnell, schmerzlos und störungsfrei wie möglich verläuft. Ich wäre wirklich dankbar, wenn jemand herausfinden könnte, wie man eine "pom.xml"-Datei erstellen kann, die es uns ermöglicht, unsere aktuelle Infrastruktur beizubehalten.

3voto

Rich Seller Punkte 81404

Wenn Sie sich sicher sind, auf Maven 2 umzusteigen, wird es Ihnen eine Menge Ärger ersparen, wenn Sie die Projektstruktur so ändern, dass jedes Modul seine eigenen Quellen und Tests enthält und den Maven-Konventionen folgt.

Wenn Sie das nicht können, können Sie eine parallele Modulhierarchie erstellen und jedes Modul mit relativen Pfaden konfigurieren, die auf Ihre bestehende Struktur zurückverweisen. Die Struktur könnte am Ende etwa so aussehen:

|- 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
    |-...

Möglicherweise möchten Sie auch Zwischenpoms hinzufügen, damit Sie zusammenhängende Gruppen bilden können (z. B. eine share pom mit allen Freigabemodulen).

Das könnten Sie tun:

  • jedes pom mit den entsprechenden relativen Pfaden konfigurieren, damit es seine Quellen bauen kann.
  • das maven-dependency-plugin zum Entpacken konfigurieren Embed Ressourcen in target/flex/resources
  • verwenden Sie die build-helper-maven-plugin um target/flex/resources als Ressourcenspeicherort festzulegen (beachten Sie, dass dies möglicherweise nicht funktioniert, da das Plugin erwartet, dass Embed-Ressourcen in src/main/resources liegen)
  • die entsprechenden Abhängigkeiten zwischen den Modulen definieren.
  • verwenden Sie die maven-antrun-plugin um die endgültigen Artefakte in das bestehende bin-Verzeichnis zu kopieren (wenn Sie versuchen, dasselbe Ausgabeverzeichnis zu verwenden, indem Sie project.build.outputDirectory setzen, aber dann wird ein Clean eines Moduls andere Builds verpfuschen).

Hier ist eine Beispielkonfiguration, um diese Schritte für einen der Poms zu erreichen:

<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>

0voto

sal Punkte 22948

Ein Projekt mit mehreren Modulen sollte wie folgt aussehen

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

Mehrere Quellen in einem einzigen Projekt zu haben ist in Ordnung, wenn Sie planen, ein einziges Artefakt zu erstellen, aber Maven kooperiert nicht, wenn Sie versuchen, mehrere Artefakte aus mehreren Quellen in einem einzigen Projekt zu erstellen.

Wenn Sie den Source-Tree nicht verschieben können, erstellen Sie eine Multi-Modul-Pom-Hierarchie in der aktuellen Struktur und bearbeiten Sie die neuen Child-Poms so, dass ihre src- und test-Verzeichnisse auf die aktuellen src- und test-Verzeichnisse der Source-Hierarchie verweisen.

Sie können die Ausgabeordner auch alle auf denselben Ordner verweisen lassen.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X