我的本地文件系统中有一个工件,但Ivy不解决它,除非我把< filesystem> < chain>内的解析器。并在解析它时重命名工件扩展。
这是我的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文件。它位于正确的位置并且命名正确(根据&lt; artifact&gt;的模式属性。但是当我运行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
为什么找不到我的模块?
然后:如果我把&lt; filesystem&gt; &lt; chain&gt;内的元素元素,它解决了:
[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)
所以这很奇怪。为什么&lt; chain&gt;做出改变? 顺便说一下,为什么我的模块现在是JAR ???我发誓,源文件是一个ZIP文件。它也是正确的 - 我只是重建了ZIP,最新的更改在我的JAR文件中。为什么常春藤重命名呢?
答案 0 :(得分:8)
默认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文件夹中。
请参阅:
调试常春藤时,使用ant -v
运行ant通常是个好主意。这将提供更多额外的信息。