2011-02-28 74 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