我一直在努力让Maven2与我合作,并且想知道是否有人对如何使这项工作有任何想法....我正在研究一个Flash项目,我们正在考虑从我们的将Flex4 / FlashCS4混合到纯Flex4解决方案中。我们希望使用Maven2构建系统,这样我们的开发人员就不必在他们的机器上手动下载,安装和配置Flex4。
我已经设法使用Maven2和Flex4创建单个模块项目(我使用的是Sonatype FlexMojos插件及其位于 http://repository.sonatype.org/content/groups/flexgroup/的Maven2存储库)。在制作这个多模块时,我真的开始遇到麻烦......
我们的项目安排如下:
|- 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文件放在“lib”中。我们的资产(我们希望能够使用“@Embed”或“[Embed]”标签引用的内容)位于“共享”下。我已经查看了项目继承和聚合的参考资料,但似乎找不到任何可以让我们保留现有项目目录结构的东西。我们希望这种迁移尽可能快速,轻松,无中断。如果有人能弄清楚如何创建一个允许我们保留当前基础设施的“pom.xml”文件,我将非常感激。
答案 0 :(得分: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
|-...
您可能还想添加临时pom,以便您可以构建相关集(例如,包含所有共享模块的share
pom。)
然后你可以:
Embed
资源解压缩到target / flex / resources 以下是为其中一个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>
答案 1 :(得分:0)
多模块项目应如下所示
Root
|- Module a
| |- src
|- Module b
| |- src
|- Module c
| |- src
如果您计划构建单个工件,则在单个项目中拥有多个源是可以的,但如果您尝试在单个项目中从多个源构建多个工件,则Maven不会合作。
如果你不能移动源树;在当前结构中创建一个多模块pom层次结构,并编辑新的子pom,将其src和测试目录指向当前的源层次结构src和测试目录。
您可以将输出文件夹全部指向同一文件夹。
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