IvyDE 无法解析 Mule 依赖

IvyDE unable to resolve Mule dependencies

我正在使用 Apache Ivy 来管理传递依赖。

使用 Maven 是一次很好的体验,因为如果有任何依赖项在远程目录中不可用或在不同版本中可用,那么 Maven 将有效地管理它们。

然而,在我尝试管理 Mule 依赖项时,Ivy 遇到了这个问题,但 Ivy 很难管理,而 Maven 管理得很好,没有任何问题。

更重要的一点是,我什至不能排除任何依赖,因为我不想排除,但我希望 Ivy 有足够的能力,以便它可以管理所有或任何其他方式(如果有的话)。

下面是错误的屏幕截图以及必要的 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> 

使用你的例子我有一个不同的错误:

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

备注:

  • 与 grabbag 依赖项关联的 POM 已损坏。
  • 解决方法告诉 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 存储库

错误分析

第一个错误分析

我追踪到这是 "mule-core" 模块的父 pom 的问题。

存在覆盖依赖关系,其中 属性 引用 Maven Central 中不存在的 "mule-mvel2" 模块版本

<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 文件引起的:

包装已从 "jar" 默认值

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

ivy 的变通方法是排除这个损坏的传递依赖项,然后明确地将 jar 工件作为 ivy 文件中的第二个依赖项。

我已经通过该项目提出了 github issue