【问题标题】:IvyDE unable to resolve Mule dependenciesIvyDE 无法解析 Mule 依赖项
【发布时间】:2015-11-25 07:54:30
【问题描述】:

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

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

但是,在我的情况下,Ivy 遇到了这个问题,因为我正在尝试管理 Mule 依赖项,但是 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> 

【问题讨论】:

  • 您使用的是 ivysettings 文件吗? Maven Central 中不存在 groupid “org.mule.extensions”:search.maven.org/#search|ga|1|g%3A%22org.mule.extensions%22
  • 你好,马克,到目前为止我还没有使用任何 ivysettings 文件。但是,如果 Maven 自己处理所有这些依赖项,那么为什么 Ivy 不处理包括 mule 依赖项在内的那些。
  • 检查我包含的链接。 Maven Central 中不存在依赖项,这就解释了 ivy 失败的原因。这就是为什么我问你是否使用了 ivysettings 文件。我推测您可能是从另一个 Maven 存储库下载的。
  • 嗨,马克,我已经更新了这个问题,请再次解决这个问题,因为我还在为此苦苦挣扎。

标签: java maven ant mule ivyde


【解决方案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 已损坏。
  • 变通方法告诉 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

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 2016-06-17
    • 2021-11-07
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2014-05-03
    • 2018-10-07
    相关资源
    最近更新 更多