2012-05-17 188 views
2

我應該創建一個本地資源庫來更改項目中依賴項的依賴關係嗎?如何使用lein來管理依賴關係的依賴關係?

我有一個正在使用docjure的clojure項目。 docjure包含對poi 3.6的依賴關係。

由於我正在閱讀的生成的Excel文件中存在一個錯誤,我有一個本地版本的poi 3.8,我已經入侵以解決該錯誤。

很容易將我的poi 3.8 jar添加到我的項目lib /目錄中,以便我的項目在repl上運行正常。

但是,lein deps(或jar和uberjar)高興地清理了lib /目錄並重新安裝了poi的3.6版本,打破了我的構建。

我認爲可能的解決方案是雙重的:

1 - 把我砍死POI 3.8到本地存儲庫 2 - 創建docjure我自己的本地副本,並更新它的依賴,使其指向本地存儲庫。

我在尋找確認這是在這種情況下做的「正確的事情」,或者有人指出,做其他事情要容易得多。

回答

4

如果您尚未閱讀,請務必閱讀Leiningen的Repeatability wiki頁面。要引用它的一部分:

如果代碼是公開的,你應該打開與上游的錯誤報告,讓他們來發布它像Clojars,Sonatype的,或Maven中央公共庫,根據不同的項目。如果它們耐藥或太慢,總是可以發佈「Clojars forks」;請參閱lein幫助部署以瞭解更多詳情。

最終的解決方案是嘗試讓您的更改推向上游。那麼你可以依賴於你需要的版本,而我認爲如果它比傳遞版本更高,Leiningen會更喜歡那個版本。


另一種選擇可能是將您的jar包含在安全(簽入)目錄中。然後寫一個插件,可以hook into a built-in task並將jar複製到你的lib目錄中。我真的不知道這是否會取得成功,但值得深入研究。

+0

感謝指向重複性頁面的指針Jeremy。我在poi中放置的黑客刪除了(正確檢測到的)異常情況。根本問題是Excel文件在內部格式不正確。 Poi閱讀器可以正確檢測到這種特定情況。所以它不是一個修復,而是一個糟糕的解決方法。 –

+0

@tom_b,也許創建一個插件鉤子?檢查我的更新。 – Jeremy

+1

我可能會嘗試插件鉤子,只是因爲它看起來很時髦。感謝您的鏈接。最終,我可能會創建一個本地存儲庫,只是出於支持/維護的原因。 –