Flex4 セットアップを使用した複雑な Maven2
-
18-09-2019 - |
質問
私は Maven2 を協力させるのに苦労していましたが、これを機能させる方法について何かアイデアを持っている人はいないだろうかと思っていました...私は Flash プロジェクトに取り組んでおり、ハイブリッド Flex4/FlashCS4 から純粋な Flex4 ソリューションへの切り替えを検討しています。私たちは、開発者が自分のマシンに Flex4 を手動でダウンロード、インストール、構成する必要がないように、Maven2 ビルド システムを使用したいと考えています。
Maven2 と Flex4 を使用して単一モジュールのプロジェクトを作成することができました (私は Sonatype FlexMojos プラグインと、次の場所にある Maven2 リポジトリを使用しています) http://repository.sonatype.org/content/groups/flexgroup/)。このマルチモジュールを作るとなると、本当に問題が発生し始めます...
私たちのプロジェクトは次のように構成されています。
|- bin | |- moduleX.swf | |- moduleY.swf | |- ... |- lib | |- moduleA.swc | |- moduleB.swc | |- ... |- src | |- moduleA | |- moduleB | |- ... |- test | |- moduleA | |- moduleB | |- ... |- share | |- asset1 | |- asset2 | |- ... |- ...
基本的に、各モジュールのソースは「src/<modulename>/」に配置され、テスト ソースは「test/<modulename>/」に配置され、生成された SWF ファイルは「bin」に配置され、生成された SWC ファイルは「bin」に配置されます。 「ライブラリ」で。私たちのアセット (「@Embed」または「[Embed]」タグを使用して参照できるようにしたいもの) は、「share」の下に存在します。プロジェクトの継承と集約に関するリファレンスを調べましたが、既存のプロジェクト ディレクトリ構造を維持できるものは見つからないようです。私たちは、この移行ができるだけ迅速で、苦痛なく、中断なく行われることを望んでいます。現在のインフラストラクチャを維持できる「pom.xml」ファイルを作成する方法を誰かが見つけてくれれば、本当に感謝します。
解決
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
|-...
関連するセットを構築できるように、暫定的な pom を追加することもできます (例:ある share
すべての共有モジュールを含む pom)。
次に、次のようにすることができます。
- ソースを構築できるように、適切な相対パスを使用して各 pom を構成します。
- maven-dependency-plugin を解凍するように設定します。
Embed
リソースをターゲット/フレックス/リソースに追加 - 使用 ビルドヘルパー-Maven-プラグイン target/flex/resources をリソースの場所として設定します (プラグインは埋め込みリソースが src/main/resources にあると想定しているため、これは実際には機能しない可能性があることに注意してください)
- モジュール間の適切な依存関係を定義します。
- 使用 maven-antrun-プラグイン 最終的なアーティファクトを既存の 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>
他のヒント
マルチモジュールプロジェクトは次のようになります。
Root
|- Module a
| |- src
|- Module b
| |- src
|- Module c
| |- src
単一のプロジェクトに複数のソースを持つことは、あなたが、単一のアーティファクトを構築する予定がある場合罰金ですが、あなたは、単一のプロジェクトに複数のソースから複数のアーティファクトを構築しようとしている場合Mavenは協力しません。
あなたは周りのソースツリーを移動することができない場合。現在の構造でマルチモジュールポンポン階層を作成し、現在のソース階層srcとテストディレクトリに自分のsrcおよびテストのディレクトリを指すように新しい子-POMSを編集します。
あなたにも同じフォルダに出力フォルダにすべてのポイントを持つことができます。
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