java - IvyDE 无法解析 Mule 依赖关系

标签 java maven ant mule ivyde

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

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

然而,在我的例子中,Ivy 遇到了这个问题,因为我正在尝试管理 Mule 依赖项,但 Ivy 很难管理,而 Maven 可以很好地管理它,没有任何问题。

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

下面是错误的屏幕截图以及必要的 XML 文件。

enter image description here

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>

注释:

  • 与抓取包依赖项关联的 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 Artifact 作为 ivy 文件中的第二个依赖项拉下来。

我已经筹集了github issue与该项目。

关于java - IvyDE 无法解析 Mule 依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33865008/

相关文章:

java.lang.IllegalStateException : Already connected for setRequestProperty method : Java 错误

java - CentOS .exe 程序的最大堆大小无效

java - Wildfly 和 Jackson @JsonIgnore 注释

java - 如何在最终 list 中设置权限

windows - 无论如何,Apache ant 都会删除目录

java - java中语言特征的MaxEnt分类器实现?

java - 如何将参数传递给 URL 并获取生成的图像

java - cobertura 未能通过反射类测试

java - 使用属性值设置 Maven 父版本?

java - 更改 JDK 以从构建 xml 中运行 <ANT> 任务