3

私はMaven2に協力してもらうのに苦労しており、これを機能させる方法について誰かアイデアがあるかどうか疑問に思っていました....私はFlashプロジェクトに取り組んでおり、ハイブリッドFlex4/からの切り替えを検討しています. FlashCS4 から純粋な Flex4 ソリューションへ。開発者が自分のマシンに Flex4 を手動でダウンロード、インストール、構成する必要がないように、Maven2 ビルド システムを使用したいと考えています。

Maven2 と Flex4 を使用して単一モジュール プロジェクトを作成することができました (Sonatype FlexMojos プラグインと、次の場所にある Maven2 リポジトリを使用しています)。http://repository.sonatype.org/content/groups/flexgroup/ )。このマルチモジュールの作成に関しては、本当に問題が発生し始めます....

私たちのプロジェクトは次のように構成されています。

|- ビン
 | | |- moduleX.swf
 | | |- moduleY.swf
 | | |- ...
 |- ライブラリ
 | | |- moduleA.swc
 | | |- moduleB.swc
 | | |- ...
 |- ソース
 | | |- モジュール A
 | | |- モジュール B
 | | |- ...
 |- テスト
 | | |- モジュール A
 | | |- モジュール B
 | | |- ...
 |- シェア
 | | |- 資産1
 | | |- 資産 2
 | | |- ...
 |- ...

基本的に、各モジュールのソースは「src/<モジュール名>/」の下にあり、そのテスト ソースは「test/<モジュール名>/」の下にあり、生成された SWF ファイルは「bin」に配置され、生成された SWC ファイルは配置されます。 「lib」で。私たちのアセット ("@Embed" または "[Embed]" タグを使用して参照できるようにしたいもの) は、"share" の下にあります。プロジェクトの継承と集約に関する参考文献を調べましたが、既存のプロジェクト ディレクトリ構造を維持できるものは何も見つからないようです。私たちは、この移行ができるだけ迅速で、痛みがなく、中断のないものであることを望んでいます。現在のインフラストラクチャを維持できる「pom.xml」ファイルを作成する方法を誰かが理解できれば、本当にありがたいです。

4

2 に答える 2

3

Maven 2 への移行を確信している場合は、プロジェクト構造を変更して、各モジュールに独自のソースとテストが含まれ、Maven の規則に従うようにすることで、多くの労力を節約できます。

本当にそれができない場合は、並列モジュール階層を作成し、既存の構造を指す相対パスを使用して各モジュールを構成できます。構造は次のようになります。

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

share関連するセット (すべての共有モジュールを含む pom など) を構築できるように、一時的な pom を追加することもできます。

次に、次のことができます。

  • ソースをビルドできるように、適切な相対パスで各 pom を構成します。
  • Embedリソースを target/flex/resourcesにアンパックするように maven-dependency-plugin を設定します
  • build-helper-maven-pluginを使用して、target/flex/resources をリソースの場所として設定します (プラグインは埋め込みリソースが src/main/resources にあると想定しているため、これは実際には機能しない可能性があることに注意してください)
  • モジュール間の適切な依存関係を定義します。
  • maven-antrun-pluginを使用して、最終成果物を既存の bin ディレクトリにコピーします (project.build.outputDirectory を設定して同じ出力ディレクトリを使用しようとした場合、1 つのモジュールを消去すると他のビルドが破壊されます)。

以下は、pom の 1 つでこれらの手順を実行するための構成例です。

<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>
于 2009-09-27T11:24:38.030 に答える
0

マルチモジュール プロジェクトは次のようになります。

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

1 つの成果物をビルドする予定がある場合は、1 つのプロジェクトに複数のソースを含めることは問題ありませんが、1 つのプロジェクトで複数のソースから複数の成果物をビルドしようとしている場合、Maven は連携しません。

ソースツリーを移動できない場合。現在の構造にマルチモジュール pom 階層を作成し、新しい子 pom を編集して、src および test ディレクトリを現在のソース階層の src および test ディレクトリにポイントします。

すべての出力フォルダーが同じフォルダーを指すようにすることもできます。

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
于 2009-09-27T04:36:57.703 に答える