答案 0 :(得分:1)
我的解决方案有点复杂并且感觉“很脏” - 我认为可能会有更清洁的方式,但至少我现在已经开始运行了。
基本上,我正在使用Maven-assembly-plugin创建中间zip存档('war'确实同样有效),包含swf可执行文件以及我正在创建的每个插件的任何必要的静态资产(我们是使用类似于Eclipse工作的类似OSGi的动态加载器,其中一个静态文件是plugin.xml,其他是翻译文件,其中没有一个可以嵌入到.swf中。 Maven将.swf文件以Maven文件名表示法存储为主要工件 - 我完全无视 - 以及我的zip存档(根据finalName标记使用.swf名称)。 POM和程序集文件的工作原理如我原来的问题所示。
我添加了一个空白的装配项目,其唯一目标是依赖并因此包括我的所有其他项目。这个项目的输出是我的最终“真实”工件,我可以将其用于分发和部署。由于我不想将我的Eclipse工作区与太多帮助项目集群,因此我打破了Maven项目和Eclipse项目的1:1关系:我的Maven程序集插件只存在于master_build项目内的子目录“assembly”中。我在我的主pom(master_build / pom.xml)中为它添加了一个模块语句,它将作为最后一个项目在reactor中执行。 (由于给定的依赖性,订购是自动完成的 - 如果您将其指定为第一个模块并且最后没有执行,那么您正在构建您不需要的项目:)
我还让我的装配项目POM成为我的主POM的孩子。这不是必需的,但通过这样做,我可以继承我定义的Maven属性。它还继承了对Flex编译器的调用,但由于此处没有任何可编译的内容,因此不会造成损害。 YMMV。
这是POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>de.zefiro.maven.example</groupId>
<artifactId>full_build</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>
<groupId>${group-id}</groupId>
<artifactId>full_assembly</artifactId>
<name>Final Assembly</name>
<version>${project.parent.version}</version>
<packaging>pom</packaging> <!-- note that this is POM here, not war or zip -->
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<descriptors>
<descriptor>final-assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>Final-Packaging</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>de.zefiro.maven.example</groupId>
<artifactId>wrapper</artifactId>
<version>1.0</version>
<type>war</type>
</dependency>
<dependency>
<groupId>${group-id}</groupId>
<artifactId>project_swf</artifactId>
<version>${project.version}</version>
<type>zip</type>
<classifier>WebContent</classifier> <!-- needs to be the ID of the assembler xml which packaged the zip file -->
</dependency>
[... all other projects which should be packaged ...]
</dependencies>
</project>
遵循汇编描述符。有关详细信息,请参阅assembly descriptor documentation。
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>FinalAssembly</id>
<formats>
<format>war</format> <!-- can be either zip or war, depending on what you wish -->
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<includes>
<include>de.zefiro.maven.example:wrapper:war:*</include>
</includes>
<unpack>true</unpack>
</dependencySet>
<dependencySet>
<includes>
<include>${group-id}:project_swf:zip:WebContent:${project.version}</include>
</includes>
<useProjectAttachments>true</useProjectAttachments>
<unpack>true</unpack>
<outputDirectory>sample_project_1</outputDirectory>
</dependencySet>
[... list the same projects as in the POM file ...]
</dependencySets>
</assembly>
我有一个我正在消费的档案,来自不同的部门。它包含HTML包装器和运行的主Flex应用程序(稍后根据配置文件和单个项目plugin.xml元数据从子目录加载我的所有插件)。它位于输出存档根目录中。所有其他项目都是我自己创建的项目并放在各个子目录中,因此我不在这里使用通配符。由于我想要一个包含所有合并文件的存档,因此我使用了依赖项集的解压缩选项。
请注意,在各个swf插件项目的asembly描述符中声明的ID现在用作pom文件的依赖项部分中的分类器以及程序集描述符中Maven位置的一部分。包装类型相同,我在这里选择拉链。由于这仅用于中间档案,拉链很好,对于最终组装,可以选择不同的格式。
从同一个父继承,我可以重用我的Maven属性,这些属性也可以在程序集描述符中使用。
可以通过复制现有项目并将其添加到:
来添加新项目最终的工件是一个war文件,其中包含:
sample_project_1/SampleProjectModule1
sample_project_1/assets/labels.xlf
sample_project_1/config/config.xml
other_data/configuration.xml
application.swf
index.html
即。我们在各自子目录中的所有swf项目的内容与包含静态文件的wrapper.war的内容合并。
可以从此位置的存储库中检索它:
de.zefiro.maven.example:full_assembly:war:FinalAssembly:1.0-SNAPSHOT
要编译每个插件的样式表,我使用相同的基本思想,向下移动到单个项目级别。我将在the other questions
中对其进行描述打开问题:我无法同时生成文件的调试版和发行版。我可以将项目加倍并将它们打包在一起(就像我对样式表一样)或者我可以运行整个Maven反应器(对于父POM和主程序集)两次,例如不同的groupIds,从而为所有涉及的项目创建两个完全独立的路径。不过,我没有对此进行进一步调查。