【问题标题】:Ivy doesn't find my artifact in filesystem常春藤在文件系统中找不到我的工件
【发布时间】:2012-02-01 03:56:59
【问题描述】:

我的本​​地文件系统中有一个工件,但 Ivy 无法解析它,除非我将 解析器放在 中。并在解析工件扩展时重命名它。

这是我的 ivy.xml:

<ivy-module version="2.0">
    <info organisation="apache" module="hello-ivy"/>
    <dependencies>
        <dependency org="myorg" name="mymodule" rev="1.1-SNAPSHOT"/>
    </dependencies>
</ivy-module>

这是我的 ivysettings.xml:

<ivysettings>
  <settings />

  <resolvers>
      <filesystem name="local">
        <artifact pattern="/path/to/my/artifact/[module]/dist/[module]-[revision].zip" />
      </filesystem>
  </resolvers>
</ivysettings>

我的 build.xml:

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="hello-ivy" default="deps">

  <target name="deps" description="--> retrieve dependencies with ivy">
    <ivy:settings file="ivysettings.xml"/>
    <ivy:resolve />
    <ivy:retrieve />
  </target>
</project>

工件是一个 .zip 文件。它在正确的位置并正确命名(根据 的模式属性。但是当我运行 ant 时,它无法解析工件:

[ivy:resolve] :::: WARNINGS
[ivy:resolve]       ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve]       ::          UNRESOLVED DEPENDENCIES         ::
[ivy:resolve]       ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve]       :: myorg#mymodule;1.1-SNAPSHOT: no resolver found for myorg#mymodule: check your configuration
[ivy:resolve]       ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve] :::: ERRORS
[ivy:resolve]   unknown resolver null
[ivy:resolve]   no resolver found for myorg#mymodule: check your configuration

为什么找不到我的模块?

然后:如果我将 元素放在 元素中,它会解析:

[ivy:resolve]   found myorg#mymodule;1.1-SNAPSHOT in local
[ivy:resolve] downloading /path/to/my/artifact/mymodule/dist/mymodule-1.1-SNAPSHOT.zip 
[ivy:resolve] ..................(lots of dots here).....(37899kB)
[ivy:resolve]   [SUCCESSFUL ] myorg#mymodule;1.1-SNAPSHOT!mymodule.jar (430ms)

所以这很奇怪。为什么 会有所作为? 顺便说一句,为什么我的模块现在是 JAR ???来源是一个 ZIP 文件,我发誓。这也是正确的——我刚刚重建了 ZIP,最新的更改在我的 JAR 文件中。为什么Ivy要重命名?

【问题讨论】:

    标签: ivy dependency-management


    【解决方案1】:

    默认type of an artifact in ivy is jar and the default extension is jar, too. 这将导致重命名。

    你必须像这样定义你的依赖(明确定义工件):

    <dependency org="myorg" name="mymodule" rev="1.1-SNAPSHOT">
      <artifact name="mymodule" type="zip" conf="A,B"/>
    </dependency>   
    

    但你必须正确定义文件系统解析器:

      <filesystem name="local">
        <artifact pattern="/path/to/my/artifact/[module]/dist/[module]-[revision].[ext]" />
      </filesystem>
    

    最好的方法是为您的特殊依赖项定义一个适当的 ivy.xml,它清楚地定义了可用的工件。并将其放在您的 dist 文件夹中。

    见:

    在调试 ivy 时,使用 ant -v 运行 ant 通常是个好主意。这将提供很好的附加信息。

    【讨论】:

    • 感谢@oers,这解释了为什么我的 ZIP 变成了 JAR;如果我把 元素放在那里,我会得到我的 ZIP。关于另一部分的任何想法 - 即为什么需要 元素?
    • @ladlestein 不,它应该没有。您是否再次尝试使用新设置?
    • @ladlestein 要避免使用链式解析器,请尝试在 settings 标记中指定 defaultResolver="local" 属性:ant.apache.org/ivy/history/latest-milestone/settings/…
    • @oers 我确实再试了一次,结果相同 - 现在我得到一个 ZIP 文件,但前提是我将 放在那里。
    • @MarkO'Connor 有效 - 它在没有 的情况下解决。为什么这行得通?除非您有 解析器,否则 defaultResolver 是强制性的吗?还是我的设置有什么特别之处?
    猜你喜欢
    • 2011-04-12
    • 2016-10-08
    • 2016-02-15
    • 2014-08-13
    • 2012-12-23
    • 2011-02-14
    • 2012-10-09
    • 2014-10-20
    • 1970-01-01
    相关资源
    最近更新 更多