【问题标题】:getting error message: "unknown resolver XYZ"收到错误消息:“未知解析器 XYZ”
【发布时间】:2011-07-05 22:01:41
【问题描述】:

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

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

【问题讨论】:

    标签: ant ivy


    【解决方案1】:

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

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

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

    【讨论】:

    • 这不正确,解析器可以轻松更改。我可以定义几个解析器并通过模块标签配置它们。或者只是使用多个设置文件并通过 settingsref 属性引用它们。
    • 当然可以。我的观点是常春藤缓存记录了很多解析器相关的信息。根据我的经验,需要定期清除此缓存,尤其是在我更改 ivy 设置时。
    • 终于承认了这个答案,清理缓存对我有用。虽然我几乎每次都在打扫,所以这仍然远非最佳。
    • 为我工作。以前有一堆,现在有一些“未知解析器空”。
    【解决方案2】:

    使用详细标志 (-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

    【讨论】:

    • 看起来很有希望,我明天试试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2011-10-24
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多