Ошибка компиляции проекта 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
и заменить их на самые последние и посмотреть, как это происходит...
Удачи!:)