1

我正在使用 IntelliJ IDEA 将现有的 flex 项目转换为 maven 项目。根据谷歌的研发,我添加了 pom.xml 文件,并通过添加所需的依赖项解决了多个问题。但是,我现在被困在一个点上,尽管在 pom 文件中添加了所需的依赖项,但“编译”目标仍然抛出错误。

错误:

无法在项目 TA_UI_Test1 上执行目标 net.flexmojos.oss:flexmojos-maven-plugin:7.1.0:compile-swf (default-compile-swf):java.lang.reflect.InvocationTargetException:全局工件不可用。确保将“playerglobal”或“airglobal”添加到该项目中。-> [帮助 1]

pom.xml 文件:

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

  <groupId>com.test</groupId>
  <artifactId>TA_UI_Test1</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>swf</packaging>

  <name>TA_UI_Test1 Flex</name>

  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <groupId>net.flexmojos.oss</groupId>
        <artifactId>flexmojos-maven-plugin</artifactId>
        <version>7.1.0</version>
        <extensions>true</extensions>
          <configuration>
              <sourceFile>Main.mxml</sourceFile>
              <debug>true</debug>
              <!--<swfVersion>11</swfVersion>-->
              <!--<targetPlayer>10.2</targetPlayer>-->
          </configuration>
          <dependencies>
              <dependency>
                  <groupId>com.adobe.flex</groupId>
                  <artifactId>compiler</artifactId>
                  <version>4.6.b.23201</version>
                  <type>pom</type>
              </dependency>
          <dependency>
            <groupId>com.adobe.flex.compiler</groupId>
            <artifactId>flex-compiler-oem</artifactId>
            <version>4.1.0.16076</version>
          </dependency>
          <dependency>
            <groupId>com.adobe.flex.compiler</groupId>
            <artifactId>mxmlc</artifactId>
            <version>4.1.0.16076</version>
          </dependency>
          <!--<dependency>-->
            <!--<groupId>com.adobe.flex.framework</groupId>-->
            <!--<artifactId>playerglobal</artifactId>-->
            <!--<version>10-3.3.0.4852</version>-->
            <!--<type>swc</type>-->
          <!--</dependency>-->
            <!--<dependency>-->
                <!--<groupId>com.adobe.flex.framework</groupId>-->
                <!--<artifactId>playerglobal</artifactId>-->
                <!--<version>4.5.1.21328</version>-->
                <!--<classifier>10</classifier>-->
                <!--<type>2.swc</type>-->
            <!--</dependency>-->
              <dependency>
                  <groupId>com.adobe.flex.framework</groupId>
                  <artifactId>playerglobal</artifactId>
                  <version>3.2.0.3958</version>
                  <classifier>9</classifier>
                  <type>swc</type>
              </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>

  <dependencies>        
    <dependency>
      <groupId>com.adobe.flex.framework</groupId>
      <artifactId>flex-framework</artifactId>
      <version>4.6.b.23201</version>
      <type>pom</type>
    </dependency>
    <dependency>
      <groupId>com.adobe.flex.compiler</groupId>
      <artifactId>asdoc</artifactId>
      <version>4.6.b.23201</version>
    </dependency>
    <dependency>
      <groupId>com.adobe.flex</groupId>
      <artifactId>compiler</artifactId>
      <version>4.6.b.23201</version>
      <type>pom</type>
    </dependency>
    <dependency>
      <groupId>com.adobe.flex.compiler</groupId>
      <artifactId>flex-compiler-oem</artifactId>
      <version>3.6.0.16995</version>
    </dependency>
    <dependency>
      <groupId>com.adobe.flexunit</groupId>
      <artifactId>flexunit</artifactId>
      <version>0.85</version>
      <type>swc</type>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.adobe.flex.compiler</groupId>
      <artifactId>mxmlc</artifactId>
      <version>4.1.0.16076</version>
    </dependency>
      <!--<dependency>-->
          <!--<groupId>com.adobe.flex.framework</groupId>-->
          <!--<artifactId>playerglobal</artifactId>-->
          <!--<version>10-3.3.0.4852</version>-->
          <!--<classifier>10.2</classifier>-->
          <!--<type>swc</type>-->
      <!--</dependency>-->
      <!--<dependency>-->
          <!--<groupId>com.adobe.flex.framework</groupId>-->
          <!--<artifactId>playerglobal</artifactId>-->
          <!--<version>4.5.1.21328</version>-->
          <!--<classifier>10</classifier>-->
          <!--<type>2.swc</type>-->
      <!--</dependency>-->
      <dependency>
          <groupId>com.adobe.flex.framework</groupId>
          <artifactId>playerglobal</artifactId>
          <version>3.2.0.3958</version>
          <classifier>9</classifier>
          <type>swc</type>
      </dependency>
  </dependencies>
</project>

我尝试过的事情:
1. 我已经添加了工件 playerglobal 所需的依赖项,如上面的 pom.xml 文件中所示,并且我尝试了 3 个不同的版本(见上面的 pom)。但是,它们都没有帮助。
2. 我尝试在“插件”节点内添加 playerglobal 依赖项,以及在 pom.xml 中单独添加公共“依赖项”节点内。但是,他们中的任何一个都没有帮助。[尝试这两种方法的原因是,对于 flex-compiler-oem 和 mxmlc 的其他几个依赖项,当仅在公共“依赖项”节点中添加依赖项时,它无法识别所需的类。当我将它们添加到“插件依赖项”中时,它会从这些错误中继续。]
3. 按照这个文章中,我还尝试在“配置”节点之后保留“com.adobe.flex > 编译器”。然而,这也无济于事。
4. 我现在使用的是 Maven 3.2.5,但我也尝试过其他各种 Maven 版本,如 3.3.9、3.0.5、3.1.1。他们也没有帮助。(根据本文,flexmojos-maven-plugin 7.1.0 不支持 3.3.9 。它还说 maven 3.2.5 工作正常。使用 maven 3.0.5 表示所需的最低 maven 版本是 3.1.1。并且使用 maven 3.1.1 会产生与我现在使用 maven 3.2.5 相同的错误。)

我的 SDK/IDE 版本:
Maven:3.2.5
Flex:3.2.0
JDK:1.8
IntelliJ IDEA:Ultimate 2017.1

任何帮助将不胜感激。提前致谢。

4

2 回答 2

0

我现在已经解决了上述问题。我遇到了一些关于 mavenizing Flex SDK 的链接,例如thisthis。第二个链接是卡尔斯普林在上述答案中建议的链接;但是,我无法完全按照它的步骤进行操作,因为其中提到的 git URL 在我的公司网络中被阻止。所以我从之前的链接下载了代码并创建了mavenizer,并按照链接中给出的步骤执行它以生成mavenized SDK。(我在 mavenizer 中遇到了一个问题,其中连接到外部 maven 存储库以检查更新,所以我评论了该代码并在此之后成功创建了 mavenized SDK。)

生成 Mavenized SDK 后,您只需将其复制到本地 maven 存储库中,然后 playerglobal/airglobal 依赖项将成功解析。

注意:除了上面提到的第一个链接,也可以参考这个链接,里面有更详细的 mavenizing Flex SDK 的步骤。它对我正确创建文件夹结构有很大帮助。

于 2018-02-05T11:01:10.963 回答
0

我不知道你对在 Maven 世界中使用 Flex 的熟悉程度,但是有很多关于如何在后 Flash 世界中使用 Flex 的讨论(我不必处理设置和维护基于 Flex Maven 的项目现在大约需要 5-6 年)。基本上,Adobe 不想将他们的工件发布到 Maven Central,他们曾经有自己的存储库。然后 Adob​​e 放弃了他们的 Flex 项目并将其贡献给 Apache(如果我没记错的话,不是全部,而是大部分)。Apache 的人在很大程度上重新设计了一些东西,并且现在一直在开发它。

说实话,这些年来我都没有跟进过 Flex,因为我认为不再使用它没有意义,就像 HTML5 一样,Flex 似乎是一种过时的技术。世界不再使用 Flash,这给每个人带来了很多好处。但是,这只是我的意见,我不是 UI 专家。

Apache 的人决定不重置版本并继续 Adob​​e 离开的地方——只是工件坐标发生了变化。groupId-s 现在是 org.apache.flex*(您可以查看此处发布的 Apache Flex 依赖项),而不是 com.apache.*。这些工件现在可以通过 Maven Central 获得。您应该切换到更新版本的 Maven 并至少使用 3.3.9。

有关项目历史的更多信息(这实际上非常重要,如果您想更好地了解依赖混乱以及现在什么是事实,什么不是,请查看此处此处)。Flex 文档现在位于 Apache 站点上。这个页面可能是我能找到的最新和最详细的页面,尽管我不能 100% 确定它是最新的。

您将不得不做一些进一步的阅读和调查,但根据您上面的示例,看起来您使用的是非常非常旧的 Flex 库版本。我建议使用Maven Central 的搜索引擎并搜索每个artifactId-s 并用最新的替换它们,看看情况如何......

祝你好运!:)

于 2018-02-02T13:34:18.567 回答