我正在尝试使用Flexmojos 7.0.0构建一个Flex项目
ERROR]无法在项目gestouch上执行goal net . flex mojos . OSS:Flex mojos-maven-plugin:7 . 0 . 0:compile-swf(default-compile-swf)-示例:执行goal net . Flex mojos . OSS:Flex mojos-maven-plugin:7 . 0 . 0:compile-swf失败:Flex编译器和Flex框架版本不匹配。编译器:“4 . 12 . 1 . 2014 04 27”-框架:“4.1.0.16076”。
[错误]您可以使用“iKnowWhatImDoingPleaseBreakMyBuildIwontBlameFlexmojosForStopWorking”来禁用此检查。请参考 Flexmojos maven doc。
[错误]如果您更喜欢修复它而不是忽略它,请查看:https://docs.sonatype.org/display/FLEXMOJOS/How设置Flex SDK版本
这是我的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-log为“swc”类型时,它会尊重as3Commons-log 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的代价吗?
很抱歉这么晚才回复你的问题。
以下是您问题的答案:我注意到旧的FDK发布方式存在一些问题,并在生成新的FDK时重构了结构以避免这些问题。我改变的一件事是取消了flex框架、air框架和公共框架,因为它们混合了Apache和Adobe的依赖关系。现在您所拥有的只是一些类似于公共框架pom的东西。org.apache.flex:framework:{fdkVersion}:pom如果你引用这个而不是flex框架,并添加一个与你的最低Flash版本com.adobe.Flash.framework:playerglobal:{flashVersion}:swc相匹配的依赖项,你应该准备好了。
我强烈建议切换到Flexmojos 7.0.1(我几天前发布了它),因为它包含一些针对烦人问题的修复程序。
<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.1</flexmojos.version>
<flex.version>4.12.1.20140427</flex.version>
<flex-sdk.version>${flex.version}</flex-sdk.version>
<flashplayer.version>11.1</flashplayer.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>com.adobe.flash.framework</groupId>
<artifactId>playerglobal</artifactId>
<version>${flashplayer.version}</version>
<type>swc</type>
</dependency>
<dependency>
<groupId>org.apache.flex</groupId>
<artifactId>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>
<!--exclusions>
<exclude>
<groupId>....</groupId>
<artifactId>....</artifactId>
</exclude>
</exclusions-->
</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>
另一个问题可能是第三方libs可能会引用其他版本中的工件。因此,as3commons日志记录可能是针对adobeflex版本编译的,因此您必须排除这一点。您可以通过发出以下命令来查看哪些依赖项被拉入:
mvn dependency:tree
它应该输出一个依赖树,您可以在其中看到必须排除哪些库。
希望这能有所帮助。
克里斯
问题是flexmojos-maven插件7.0.x版本是使用Apache FDK 4.12.1.20140427构建的
要通过flexmojos构建您的项目,您需要首先通过Mavenizer(https://cwiki.apache.org/confluence/display/FLEX/Apache Flex SDK Mavenizer)在您的maven资源库中部署这个FDK (4.12.1.20140427)。如果您有外部存储库(如Nexus server ),您需要将这个FDK部署到存储库中。然后,您需要在POM文件的pluginRepositories部分显式声明这个存储库:
<!-- REPOS -->
<pluginRepositories>
<pluginRepository>
<id>flex-repository</id>
<url>http://path-to-your-repository/</url>
</pluginRepository>
</pluginRepositories>
<repositories>
<repository>
<id>flex-repository</id>
<url>http://path-to-your-repository/</url>
</repository>
</repositories>