收到错误消息:“未知的解析器XYZ”

时间:2011-02-28 16:47:25

标签: ant ivy

在解析我的ivy.xml时,我得到了一长串错误,所有错误都是“未知的解析器XYZ”。我知道解析器,它用于同一个项目但不同的任务。 据我所知,用于创建缓存条目的解析器是存储的,而后续解析器无法确定。

问题是:我该如何避免这种情况?像这样的似乎不是一个错误,更像是一个警告,因为我能够解决所有依赖关系并继续编译。

2 个答案:

答案 0 :(得分:16)

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

这可能是陈旧的常春藤缓存的问题。我建议添加一个清除缓存的额外目标。遇到此类问题时很有用:

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

答案 1 :(得分:3)

使用详细标记(-v)运行ant构建。这将使您清楚地了解整个解决过程中正在使用的设置文件。我的赌注是你会很容易找到你的问题,它将与你认为你正在使用的设置文件一致,实际上并没有被使用。

在我的项目中,我发现这种类型的事情经常发生在后解析任务(例如检索)“自动”触发解决方案并使用默认常春藤设置而不是我希望它现在使用的设置。有可能,您的默认设置文件不包含您期望的解析器。

为了解决这些问题,我制作了一个仅包含解析器的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 + ant的全部原因是我更喜欢对构建过程进行精确控制:

我希望所有这些都可以帮助你或其他人。

〜gMale