收到错误信息:“未知解析器XYZ”。

17
在解析我的ivy.xml时,我得到了一长串错误,所有错误均指出“未知的解析器XYZ”。我知道这个解析器是在同一个项目但不同任务中使用的。 据我所知,用于创建缓存条目的解析器被存储,然后不能由随后的解析器确定。
问题是:我该如何避免这种情况?似乎这不是真正的错误,更像是警告,因为我能够解决所有依赖项并继续编译。
2个回答

18

在同一个项目中,构建解析器不会更改,因为它在你的 ivysettings.xml 文件中定义。

这更可能是旧的 ivy 缓存问题。我建议添加一个额外的目标来清除你的缓存。在遇到这种类型的问题时非常有用:

<target name="clean-all" depends="clean" description="Purge ivy cache">
    <ivy:cleancache/>
</target>

1
那不正确,解析器可以轻松更改。我可以定义多个解析器并通过模块标签配置它们。或者只需使用多个设置文件,并通过settingsref属性引用它们。 - Jan Galinski
1
当然可以。我的观点是,Ivy缓存记录了许多解析器相关的信息。根据我的经验,特别是当我更改Ivy设置时,需要定期清除此缓存。 - Mark O'Connor
最终确认了这个答案,清除缓存对我有用。虽然我几乎每次都会清理,但这仍然远非最佳选择。 - Jan Galinski
对我有用。以前有很多这样的问题,现在只剩下一些“未知解析器空值”。 - LMC

3
使用详细模式(-v)运行您的ant构建。这将清楚地显示在解析过程中使用了哪些设置文件。我的猜测是,您很容易就能找到问题所在,它可能与您认为正在使用的设置文件实际上未被使用有关。
在我的项目中,我发现当后处理任务(例如retrieve)“自动”触发解析并使用默认的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

但我明确指向所有我的常春藤调用适当的设置文件,尽量不依赖默认值,因为我使用常春藤+蚂蚁的整个原因是我更喜欢对构建过程进行精确控制。希望这些能帮助你或其他人。

~ gMale


看起来很有前途,我明天会试一试。 - Jan Galinski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接