我正在尝试使用 Flexmojos 7.0.0 和 mavenized Apache Flex SDK (groupId "org.apache...") 构建一个 Flex 项目,该项目依赖于使用 Flexmojos 5 和 Adobe Flex SDK 4.6.b.23201 构建的旧库(groupId“com.adobe ...”)。问题是它给出了以下错误:
错误] 无法在项目 gestouch-examples 上执行目标 net.flexmojos.oss:flexmojos-maven-plugin:7.0.0:compile-swf (default-compile-swf):执行目标 net.flexmojos 的 default-compile-swf。 oss:flexmojos-maven-plugin:7.0.0:compile-swf failed: Flex 编译器和 flex 框架版本不匹配。编译器:'4.12.1.20140427' - 框架:'4.1.0.16076'。
[错误] 您可以使用“iKnowWhatImDoingPleaseBreakMyBuildIwontBlameFlexmojosForStopWorking”禁用此检查。请参阅 Flexmojos Maven 文档。
[错误] 如果您更喜欢修复它而不是忽略它,请查看:https ://docs.sonatype.org/display/FLEXMOJOS/How+to+set+Flex+SDK+version
这是我的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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mygroup</groupId>
<artifactId>myartifact</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>swf</packaging>
<name>Flexmojos7 Test</name>
<properties>
<flexmojos.version>7.0.0</flexmojos.version>
<flex.version>4.12.1.20140427</flex.version>
<flex-sdk.version>${flex.version}</flex-sdk.version>
</properties>
<build>
<sourceDirectory>src/main/flex</sourceDirectory>
<plugins>
<plugin>
<groupId>net.flexmojos.oss</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<version>${flexmojos.version}</version>
<extensions>true</extensions>
<configuration>
<sourceFile>Main.mxml</sourceFile>
<debug>true</debug>
<storepass/>
<skipTest>true</skipTest>
<skipTests>true</skipTests>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.flex</groupId>
<artifactId>compiler</artifactId>
<version>${flex.version}</version>
<type>pom</type>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.flex.framework</groupId>
<artifactId>flex-framework</artifactId>
<version>${flex.version}</version>
<type>pom</type>
</dependency>
<!-- 3rd party libraries -->
<dependency>
<groupId>org.as3commons</groupId>
<artifactId>as3commons-logging</artifactId>
<version>2.7</version>
<type>swc</type>
</dependency>
</dependencies>
<repositories>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/repositories/releases</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
</repository>
<repository>
<!-- has as3commons -->
<id>yoolab.org-releases</id>
<url>http://dev.yoolab.org/maven/content/repositories/releases/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
</project>
如您所见, as3commons-logging 库是我提到的依赖项。如果你打开它的POM,你会看到它取决于
<groupId>com.adobe.flex.framework</groupId>
<artifactId>air-framework</artifactId>
和
<groupId>com.adobe.flex.framework</groupId>
<artifactId>common-framework</artifactId>
两者都有 4.1.0.16076 版本。
我对 Maven 比较陌生,当我在我的 POM 依赖项中指定 as3commons-logging 的类型为“swc”时,我个人不明白为什么它尊重 as3commons-logging POM。但是好的,经过一个周末的研究,我发现了如何通过为我的依赖项指定“排除”来解决这个问题:
<dependency>
<groupId>org.as3commons</groupId>
<artifactId>as3commons-logging</artifactId>
<version>2.7</version>
<type>swc</type>
<exclusions>
<exclusion>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>air-framework</artifactId>
</exclusion>
<exclusion>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>common-framework</artifactId>
</exclusion>
</exclusions>
</dependency>
通过我的 POM 中的这个修复,它最终可以编译。
现在,我的问题是——这是正确的解决方法吗?我是说概念上的。因为整个事情对我来说似乎不是很清楚。这是从 Adobe Flex 切换到 Apache Flex 的代价吗?