2011-02-28 73 views
15

,我得到一长串错误,全部陈述“未知的解析器XYZ”。我知道解析器,它用于同一个项目但不同的任务。 据我所知,用于创建缓存条目的解析器已存储,并且不能由后续解析器确定。在解析我的ivy.xml时出现错误消息:“未知的解析器XYZ”

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

回答

14

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

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

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

这是不正确的,解析器可以很容易地改变。我可以定义几个解析器并通过模块标签进行配置。或者只是使用多个设置文件并通过settingsref属性引用它们。 – 2011-02-28 21:18:39

+0

当然可以。我的观点是,常青藤缓存记录了很多与解析器相关的信息。我的经验是,这个缓存需要定期清除,特别是当我改变常春藤设置。 – 2011-03-02 09:16:05

+0

终于承认这个答案,清理缓存对我有用。尽管我几乎每次都在进行清洁工作,但仍然远未达到最佳状态。 – 2012-07-25 18:24:05

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 +蚂蚁的全部原因是,我希望能有精确的控制在我的构建过程:

我希望能帮助你或其他人。

〜gMale

+0

看起来很有希望,明天我会试一试。 – 2011-03-15 16:51:14