Flex样式表由编译器解析,并与其资产(通常是图形)捆绑在一个swf文件中,然后可以在运行时加载。我有一个具有固定数量风格的项目(目前4:旧的企业风格,新的企业风格和两者的高对比度版本)。使用Flash Builder(带有Flex IDE插件的Eclipse)我可以将所有.css文件编译为.swf文件以及主项目工件.swf文件。使用ant脚本也可以这样做。
我目前的理解是,Maven只想为每个项目创建一个工件(POM文件),但可能会添加一些额外的工件(如zip包装)。出于可伸缩性的原因 - 我有许多库和模块项目的复杂设置,其中几个有自己的样式表 - 将项目拆分为'main'项目并为每个样式表复制是非常不切实际的。至少在Eclipse项目方面,每个都有一些POM文件的子文件夹,都是由一个主pom文件引用并引用相同的src /位置(并且在一个Eclipse项目中)可能会起作用。虽然这很丑陋,但每个人都需要单独的artifactIds,但仍然需要以某种方式进行组装。
重要的是能够拥有一个包含(Eclipse)项目主swf文件和每个样式表swf文件的最终程序集(以及一些静态文件,如在运行时加载的本地化文本)。这将是我所描述的几个项目的大型集合的一部分in a separate question。
我正在使用Eclipse 3.6.1(Helios)和Flash Builder插件(即Flex4),目标是Flex SDK 3.5(FlashPlayer 10.0)。我使用Sonatypes flexmojos-maven-plugin 3.7.1安装了Maven 3.0.2(因为它看起来比Servebox更活跃)。我已经为我的项目手动创建了pom文件并且它们可以工作(虽然只编译一个swf工件文件,具体取决于我是将主.as或其中一个.css文件指定为sourceFile)
我已经尝试了几天了解“The Maven Way”(这似乎是针对Java量身定制的,而不是完全适合Flex),但是无法让它工作,所以我有一个项目,或至少一个包含所有内容的集合。
这里最好的方法是什么?
答案 0 :(得分:1)
我没有找到从同一个POM文件创建多个工件的方法,甚至没有多次运行flexmojo编译目标(即使绑定执行标记,Maven也会抱怨)。因此,我发现的最佳方式是使用与我的整体项目非常相似的解决方案,我已经描述了in this question, including my solution,我建议阅读,因为我将基于此。我曾希望在这里采用一种不那么强硬的解决方案,使用这种多项目方法对我来说似乎有点肮脏。这也是我分开这个问题的原因,这反过来让我有幸被杰夫阿特伍德自己注意到了:))
我确实只想为我的插件使用一个Eclipse项目,但需要多个文件夹才能使用多个POM。我的文件夹结构如下所示:
colored_plugin/src/colored_plugin_main.as
colored_plugin/src/green.css
colored_plugin/src/...
colored_plugin/src/assets/rainbow.jpg <- will be embedded into stylesheet swf file
colored_plugin/WebContent/assets/labels.xlf
colored_plugin/WebContent/config/config.xlf
colored_plugin/POMs/assembly/pom.xml
colored_plugin/POMs/plugin/pom.xml
colored_plugin/POMs/style1/pom.xml
colored_plugin/pom.xml
master_build/pom.xml
master_build/swf-assembly.xml
master_build/css-assembly.xml
master_build/plugin-assembly.xml
master_build/assembly/pom.xml
master_build/assembly/final-asembly.xml
我正在使用master_build文件夹作为存储我的简单swf项目的swf-assembly文件的中心位置,因此我将包含样式表的插件的汇编描述符放在同一位置。
POM编译插件(POMs / plugin / pom.xml)非常类似于简单的swf项目之一(参见其他问题):
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>de.zefiro.maven.example</groupId>
<artifactId>colored_plugin_internal</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../</relativePath>
</parent>
<name>Colored Plugin (Plugin Executeable)</name>
<artifactId>${project.parent.artifactId}_swf</artifactId>
<packaging>swf</packaging>
<build>
<sourceDirectory>../../src</sourceDirectory>
<!-- This name needs to be exactly specified, as the runtime will load it as it's specified in the configuration xml -->
<finalName>SampleProjectModuleColored</finalName>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<version>3.7.1</version>
<configuration>
<sourceFile>colored_plugin_main.as</sourceFile>
</configuration>
</plugin>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>../../../master_build/swf-assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>WebContent-packaging</id>
<phase>package</phase>
<goals><goal>single</goal></goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>${group-id}</groupId>
<artifactId>project_swc</artifactId>
<version>${project.version}</version>
<scope>${zefiro.swf.scope}</scope> <!-- tell Flex Mojo that we want to compile using runtime shared libraries (rsl) -->
<type>swc</type>
</dependency>
[...]
</dependencies>
</project>
样式表的POM是一个几乎完全相同的版本:.css文件被指定为源代码,这里不需要依赖项(至少在我的情况下),但它仍然需要打包以便我以后可以引用(并重新包装)它用于组装。
<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>de.zefiro.maven.example</groupId>
<artifactId>colored_plugin_internal</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../</relativePath>
</parent>
<name>Colored Plugin (Stylesheet 'Green')</name>
<artifactId>${project.parent.artifactId}_css_green</artifactId>
<packaging>swf</packaging>
<build>
<sourceDirectory>../../src</sourceDirectory>
<finalName>style_green</finalName>
<plugins>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<version>3.7.1</version>
<configuration>
<sourceFile>green.css</sourceFile>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>../../../master_build/css-assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>WebContent-packaging</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
程序集描述符也是一个简化版本,只包装swf文件。我不确定它是否需要,也许组装可以直接使用默认的Maven工件完成,但对我来说最简单的方法就是像其他项目一样。
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>Stylesheet</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<!-- Take the stylesheet swf artifact (only, not the other stuff which is generated there) -->
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.swf</include>
</includes>
</fileSet>
</fileSets>
</assembly>
装配项目有这个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>colored_plugin_internal</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../</relativePath>
</parent>
<name>Colored Plugin (Assembly)</name>
<artifactId>colored_plugin</artifactId>
<packaging>pom</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<descriptors>
<descriptor>../../../master_build/plugin-assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>Plugin_assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>${group-id}</groupId>
<artifactId>${project.parent.artifactId}_swf</artifactId>
<version>${project.version}</version>
<type>zip</type>
<classifier>WebContent</classifier>
</dependency>
<dependency>
<groupId>${group-id}</groupId>
<artifactId>${project.parent.artifactId}_css_green</artifactId>
<version>${project.version}</version>
<type>zip</type>
<classifier>Stylesheet</classifier>
</dependency>
</dependencies>
</project>
插件程序集描述符将所有这些打包在一起。它也位于一个中心位置,因此以通用方式编写:它从调用POM引用group-id和artifactId,并使用我引入的名称约定。最终的项目将由程序集POM构建,因此我指定了'nice'artifactId。主项目POM(见下文)获取一个手动派生的名称,而所有其他项目(主应用程序和所有样式表)都是从这里自动派生出来的,并生成仅在内部使用的Maven工件。我有多个样式表,所以我的实际程序集POM列出了多个样式表依赖项(与此示例相反),而我的程序集描述符使用通配符全部使用它们。
<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>WebContent</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<!-- add the WebContent folder -->
<fileSet>
<directory>../../WebContent</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<!-- add plugin main executable -->
<dependencySet>
<includes>
<include>${group-id}:${project.parent.artifactId}_swf:zip:WebContent:${project.version}</include>
</includes>
<useProjectAttachments>true</useProjectAttachments>
<unpack>true</unpack>
<outputDirectory>/</outputDirectory>
</dependencySet>
<!-- add stylesheets -->
<dependencySet>
<includes>
<include>${group-id}:${project.parent.artifactId}_css_*:zip:Stylesheet:${project.version}</include>
</includes>
<useProjectAttachments>true</useProjectAttachments>
<unpack>true</unpack>
<outputDirectory>/assets/styles</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
请注意,我使用了与我用于简单swf项目的汇编描述符相同的ID(如我的其他问题所示)。这样可以更容易地在整个程序集插件中指定正确的工件,因为我可以使用“WebContent”作为所有项目的分类器。
最后,我项目的主要POM只是其他POM的小调用者:
<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_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>../master_build</relativePath>
</parent>
<name>Colored Plugin</name>
<artifactId>colored_plugin_internal</artifactId>
<packaging>pom</packaging>
<modules>
<module>pom/plugin</module>
<module>pom/style1</module>
<module>pom/assembly</module>
</modules>
</project>
可以通过以下方式添加新的样式表:
最终的项目工件是我的主程序集要使用的zip文件(并与其他项目合并)并包含这些文件:
SampleProjectModuleColored.swf
assets/labels.xlf
assets/styles/style_green.swf
config/config.xlf
它将作为
存储在存储库中de.zefiro.maven.example:colored_plugin:zip:WebContent:1.0-SNAPSHOT