Ошибка компиляции проекта Flex Maven: глобальный артефакт недоступен. Обязательно добавьте 'playerglobal' или 'airglobal' в этот проект

Я конвертирую существующий проект flex в проект maven, используя IntelliJ IDEA. Согласно исследованиям в Google, я добавил файл pom.xml и решил несколько проблем, добавив необходимые зависимости. Тем не менее, я застрял в одном месте, где, несмотря на добавление требуемой зависимости в pom-файл, цель 'compile' продолжает выдавать ошибку.

Ошибка:

Не удалось выполнить цель net.flexmojos.oss:flexmojos-maven-plugin:7.1.0:compile-swf (default-compile-swf) в проекте TA_UI_Test1: 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. Однако ни один из них не помогает. [Причина попробовать обе эти вещи заключается в том, что для другой пары зависимостей flex-compiler-oem и mxmlc он не распознавал требуемые классы, когда зависимости были добавлены только в общем узле "зависимости". Когда я добавил их внутри "зависимостей плагинов", то это пошло дальше от этих ошибок.]
3. В соответствии с этой статьей я также попытался сохранить компилятор com.adobe.flex > сразу после узла конфигурации. Однако это тоже не помогает.
4. Я сейчас использую Maven 3.2.5, но я пробовал и с другими версиями maven, такими как 3.3.9, 3.0.5, 3.1.1. Они тоже не помогают. (3.3.9 не поддерживается для flexmojos-maven-plugin 7.1.0 согласно этой статье. В нем также говорится, что 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

Любая помощь будет принята с благодарностью. Заранее спасибо.

2 ответа

Решение

Я обратился к вышеуказанному вопросу сейчас. Я наткнулся на некоторые ссылки, в которых рассказывалось о том, как придумать Flex SDK, например этот и этот. Вторая ссылка - это ссылка, предложенная carlspring в ответе выше; однако я не смог полностью выполнить его шаги, поскольку указанный в нем URL-адрес git заблокирован в сети моей компании. Поэтому я загрузил код по предыдущей ссылке, создал mavenizer и выполнил его в соответствии с шагами, приведенными в ссылке для создания mavenized SDK. (Я столкнулся с проблемой в mavenizer, когда выполняется подключение к внешнему репозиторию maven для проверки обновлений, поэтому я прокомментировал этот код и после этого успешно создал mavenized SDK.)

После создания Mavenized SDK вам просто нужно скопировать его в локальный репозиторий Maven, и тогда зависимости playerglobal/airglobal будут успешно разрешены.

Примечание. В дополнение к первой ссылке, упомянутой выше, обратитесь к этой ссылке, которая содержит более подробные инструкции по созданию Flex SDK. Это мне очень помогло в правильном создании структуры папок.

Я не знаю, насколько вы знакомы с использованием Flex в мире Maven, но было много дискуссий о том, что делать с Flex в мире после Flash (мне не приходилось сталкиваться с настройкой и поддержкой Flex Maven-проекты примерно через 5-6 лет). По сути, Adobe не хотела публиковать свои артефакты в Maven Central, у них были собственные репозитории. Затем Adobe отреклась от своего проекта Flex и внесла его в Apache (если я правильно помню, не все, но большую часть). Ребята из Apache переработали вещи в значительной степени, и именно они сейчас это развивают.

Если честно, я не следил за Flex на протяжении многих лет, так как думаю, что нет смысла использовать его больше, так как в HTML5 Flex кажется устаревшей технологией. Мир больше не использует Flash, и это принесло много пользы всем. Тем не менее, это только мое мнение, и я не эксперт по пользовательскому интерфейсу.

Ребята из Apache решили не сбрасывать версии и продолжать, где Adobe оставила - только координаты артефакта были изменены. GroupId-ы теперь org.apache.flex* (вы можете проверить опубликованные здесь зависимости Apache Flex) вместо com.apache.*. Эти артефакты теперь доступны через Maven Central. Вы должны перейти на более новую версию Maven и использовать по крайней мере 3.3.9.

Более подробно об истории проекта (что на самом деле очень важно, если вы хотите лучше понять беспорядок зависимостей и то, что сейчас является точкой правды, а что нет, пожалуйста, проверьте здесь и здесь). Документация по Flex теперь находится на сайте Apache. Эта страница, пожалуй, самая последняя и подробная, которую я смог найти, хотя я не уверен на 100%, что она актуальна.

Вам нужно будет еще кое-что почитать и изучить, но, исходя из приведенного выше примера, похоже, что вы используете очень и очень старые версии библиотек Flex. Я бы порекомендовал использовать поисковую систему Maven Central и искать каждый из artifactIdи заменить их на самые последние и посмотреть, как это происходит...

Удачи!:)

Другие вопросы по тегам