【发布时间】:2011-07-05 22:01:41
【问题描述】:
在解析我的 ivy.xml 时,我收到一长串错误,全部说明“未知解析器 XYZ”。我知道解析器,它用于同一个项目但不同的任务。 据我了解,用于创建缓存条目的解析器已存储,后续解析器无法确定。
问题是:我怎样才能避免这种情况?像这样的 Seeams 并不是真正的错误,更像是一个警告,因为我能够解决所有依赖项并继续编译。
【问题讨论】:
在解析我的 ivy.xml 时,我收到一长串错误,全部说明“未知解析器 XYZ”。我知道解析器,它用于同一个项目但不同的任务。 据我了解,用于创建缓存条目的解析器已存储,后续解析器无法确定。
问题是:我怎样才能避免这种情况?像这样的 Seeams 并不是真正的错误,更像是一个警告,因为我能够解决所有依赖项并继续编译。
【问题讨论】:
在同一个项目中,构建解析器不会更改,因为它是在您的 ivysettings.xml 文件中定义的。
这更有可能是陈旧的常春藤缓存的问题。我建议添加一个清除缓存的额外目标。遇到此类问题时很有用:
<target name="clean-all" depends="clean" description="Purge ivy cache">
<ivy:cleancache/>
</target>
【讨论】:
使用详细标志 (-v) 运行您的 ant 构建。这将使您清楚地了解在整个解析过程中使用了哪些设置文件。我敢打赌,你会很容易地发现你的问题,并且它会与你认为你正在使用的设置文件实际上没有被使用一样。
在我的项目中,我发现这种类型的事情经常发生在解决后任务(例如检索)“自动”触发解析并使用默认的 ivy 设置而不是我现在希望它使用的设置时.很有可能,您的默认设置文件不包含您期望的解析器。
为了解决这些问题,我制作了一个仅包含解析器的 ivysettings-common.xml。然后,在我的每个设置文件中,我导入通用设置并引用主链中的解析器。看起来像:
<ivysettings>
<settings defaultResolver="all-repositories" />
<include file="ivysettings-common.xml" />
<resolvers>
<chain name="all-repositories" returnFirst="true" >
<resolver ref="project" />
<resolver ref="local" />
<resolver ref="hibernate" />
<resolver ref="ibibilo" />
</chain>
</resolvers>
</ivysettings>
从那里,我将公共文件设为我的默认设置,只是“在紧急情况下”我知道可以找到我的所有解析器(通过将以下内容添加到 ivy.properties):
ivy.settings.file = ${basedir}/path/to/ivysettings-common.xml
但我明确地将所有 ivy 调用指向适当的设置文件,尽量不要依赖默认设置,因为我使用 ivy+ant 的全部原因是我更喜欢精确控制我的构建过程:
我希望所有这些都对您或其他人有所帮助。
~gMale
【讨论】: