Ivy在文件系统中找不到我的工件

Lad*_*ein 4 ivy dependency-management

我的本地文件系统中有一个工件,但除非我将<filesystem>解析器放在<chain>中,否则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>
Run Code Online (Sandbox Code Playgroud)

这是我的ivysettings.xml:

<ivysettings>
  <settings />

  <resolvers>
      <filesystem name="local">
        <artifact pattern="/path/to/my/artifact/[module]/dist/[module]-[revision].zip" />
      </filesystem>
  </resolvers>
</ivysettings>
Run Code Online (Sandbox Code Playgroud)

我的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>
Run Code Online (Sandbox Code Playgroud)

工件是.zip文件.它位于正确的位置并且命名正确(根据<artifact>的模式属性.但是当我运行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
Run Code Online (Sandbox Code Playgroud)

为什么不找到我的模块?

然后:如果我将<f​​ilesystem>元素放在<chain>元素中,它会解析:

[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)
Run Code Online (Sandbox Code Playgroud)

所以这很奇怪.为什么<chain>会有所作为?顺便说一下,为什么我的模块现在是JAR ??? 我发誓,源文件是一个ZIP文件.它也是正确的 - 我只是重建了ZIP,最新的更改在我的JAR文件中.为什么常春藤重命名呢?

oer*_*ers 8

常春藤中的工件的默认类型是jar,默认扩展名也是jar. 这将导致重命名.

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

<dependency org="myorg" name="mymodule" rev="1.1-SNAPSHOT">
  <artifact name="mymodule" type="zip" conf="A,B"/>
</dependency>   
Run Code Online (Sandbox Code Playgroud)

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

  <filesystem name="local">
    <artifact pattern="/path/to/my/artifact/[module]/dist/[module]-[revision].[ext]" />
  </filesystem>
Run Code Online (Sandbox Code Playgroud)

最好的方法是为您的特殊依赖项定义一个合适的ivy.xml,它明确定义了可用的工件.把它放在你的dist文件夹中.

看到:

ant -v调试常春藤时运行ant通常是个好主意.这将提供更多额外的信息.