IvyDE не может разрешить зависимости Mule

Я работаю с Apache Ivy для управления переходными зависимостями.

Работа с Maven была довольно хорошим опытом, потому что если бы была какая-либо зависимость, которая была бы недоступна в удаленном каталоге или была доступна с другой версией, тогда Maven справился бы с ними эффективно.

Однако в моем случае Айви застревает с этим, поскольку я пытаюсь управлять зависимостями Мул, но Айви трудно управлять, в то время как Мейвен справляется с этим хорошо без каких-либо проблем.

Еще один важный момент заключается в том, что я даже не могу исключить какую-либо зависимость, потому что я не хочу исключать, но я хочу, чтобы Айви была достаточно способной, чтобы она могла управлять всем этим или любым другим способом, если таковой имеется.

Ниже приведен скриншот ошибки вместе с необходимыми XML-файлами.

ivy.xml

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
<info
    organisation="MyOrganization"
    module="TestForIvySupport"
    status="integration">
</info>

<dependencies>
    <dependency org="org.mule" name="mule-core" rev="3.6.0"/>       
</dependencies>

ivysettings.xml

<settings defaultResolver="chained"/>
<resolvers>
    <chain name="chained">
            <url name="custom-repo">
            <ivy pattern="https://repository.mulesoft.org/nexus/content/groups/public/org/[organisation]/[module]/[revision]/ivy-[revision].xml"/>
            <artifact pattern="https://repository.mulesoft.org/nexus/content/groups/public/org/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/>
            </url>
        <ibiblio name="ibiblio" m2compatible="true" root="http://mirrors.ibiblio.org/maven2/"/>
        <ibiblio name="ibiblio1" m2compatible="true" root="http://repo1.maven.org/maven2/"/>
   </chain>
</resolvers>

build.xml

<project name="test ivy" default="test" xmlns:ivy="antlib:org.apache.ivy.ant">
<target name="test" description="Test ivy installation">
<ivy:settings file="ivysettings.xml"/>
    <ivy:retrieve sync="false" pattern="myfolder/[artifact]-[revision].[ext]"/>
</target> 

1 ответ

Решение

Используя ваш пример, у меня была другая ошибка:

[ivy:resolve]       ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve]       ::          UNRESOLVED DEPENDENCIES         ::
[ivy:resolve]       ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve]       :: org.mule.mvel#mule-mvel2;2.1.9-MULE-005: not found
[ivy:resolve]       :: org.mule.common#mule-common;3.6.0: not found
[ivy:resolve]       ::::::::::::::::::::::::::::::::::::::::::::::

Я в конечном итоге получил это работает, но обнаружил сломанный POM.

Рабочий пример

ivy.xml

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
  <info
    organisation="MyOrganization"
    module="TestForIvySupport"
    status="integration">
  </info>

  <dependencies>
    <!-- Exclude the broken dependency -->
    <dependency org="org.mule" name="mule-core" rev="3.6.0" conf="default">       
      <exclude org="com.github.stephenc.eaio-grabbag" module="grabbag"/>
    </dependency>

    <!-- Just pull down the jar artifact associated with the module -->
    <dependency org="com.github.stephenc.eaio-grabbag" name="grabbag" rev="1.8.1" conf="default">       
      <artifact name="grabbag" type="jar"/>
    </dependency>
  </dependencies>

</ivy-module>

Заметки:

  • POM, связанный с зависимостью grabbag, нарушен.
  • Обходной путь говорит ivy игнорировать POM, а затем мы явно извлекаем файл jar как второе объявление зависимости.

ivysettings.xml

<ivysettings>
  <settings defaultResolver="chained"/>
  <resolvers>
    <chain name="chained" returnFirst="true">
      <ibiblio name="central" m2compatible="true"/>
      <ibiblio name="mulesoft" m2compatible="true" root="https://repository.mulesoft.org/nexus/content/groups/public"/>
    </chain>
  </resolvers>
</ivysettings>

Заметки:

  • Упрощенный файл настроек для использования ресурсов ibiblio для общения только с двумя репозиториями Maven: Maven Central и Mulesoft.

Анализ ошибок

Анализ первой ошибки

Я отследил это до проблемы с родительским pom модуля "mule-core".

Существует зависимость переопределения, когда свойство ссылается на версию модуля "mule-mvel2", которой нет в Maven Central

<properties>
  ..
  <muleMvelVersion>2.1.9-MULE-005</muleMvelVersion>
  ..
</properties>

<dependency>
  <groupId>org.mule.mvel</groupId>
  <artifactId>mule-mvel2</artifactId>
  <version>${muleMvelVersion}</version>
</dependency>

Удалось это исправить, добавив следующий репозиторий Mulesoft.

Анализ второй ошибки

При устранении неисправностей я обнаружил вторую каскадную ошибку:

[ivy:resolve]       ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve]       ::              FAILED DOWNLOADS            ::
[ivy:resolve]       :: ^ see resolution messages for details  ^ ::
[ivy:resolve]       ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve]       :: com.github.stephenc.eaio-grabbag#grabbag;1.8.1!grabbag.non-maven-jar
[ivy:resolve]       ::::::::::::::::::::::::::::::::::::::::::::::

Эта проблема является более серьезной, поскольку она вызвана неправильно настроенным файлом POM:

Где упаковка была изменена от "баночки" по умолчанию

<packaging>non-maven-jar</packaging>

Обходным решением для ivy является исключение этой сломанной транзитивной зависимости, а затем явное удаление артефакта jar в качестве второй зависимости в файле ivy.

Я поднял вопрос GitHub с проектом.

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