我一直在努力让Maven2与我合作,并且想知道是否有人对如何实现此功能有任何想法...。我正在从事Flash项目,我们正在考虑从混合Flex4 / FlashCS4是纯Flex4解决方案。我们希望使用Maven2构建系统,以便我们的开发人员不必在其计算机上手动下载,安装和配置Flex4。

我设法使用Maven2和Flex4创建了一个单模块项目(我正在使用Sonatype FlexMojos插件及其位于 http://repository.sonatype.org/content/groups/flexgroup/的Maven2存储库)。在制作此多模块时,我真的开始遇到麻烦了。

我们的项目组织如下:

|-箱
| |-moduleX.swf
| |-moduleY.swf
| |-...
|-lib
| |-moduleA.swc
| |-moduleB.swc
| |-...
|-src
| |-moduleA
| |-moduleB
| |-...
|-测试
| |-moduleA
| |-moduleB
| |-...
|-分享
| |-asset1
| |-asset2
| |-...
|-...


基本上,我们每个模块的源均位于“ src / /”下,其测试源位于“ test / /”下,并将生成的SWF文件放置在“ bin”中,并将生成的SWC文件放置在“ bin”中在“ lib”中。我们的资产(我们希望使用“ @Embed”或“ [Embed]”标签可以引用的内容)位于“共享”下。我查看了有关项目继承和聚合的参考,但是似乎找不到任何可以使我们保留现有项目目录结构的内容。我们希望这种迁移尽可能快速,轻松且无中断。如果有人能弄清楚如何创建一个允许我们保留当前基础结构的“ 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依赖插件以将Embed资源解压缩到目标/ flex /资源中
使用build-helper-maven-plugin将target / flex / resources设置为资源位置(请注意,这可能实际上不起作用,因为该插件希望Embed资源位于src / main / resources中)
定义模块之间的适当依赖关系。
使用maven-antrun-plugin将最终工件复制到现有的bin目录中(如果您尝试通过设置project.build.outputDirectory使用相同的输出目录,但是一个模块的清除将破坏其他版本)。


这是一个示例配置,用于为其中一个pom实现这些步骤:

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

关于apache-flex - 带有Flex4设置的复杂Maven2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1482793/

10-12 23:42