2013-02-07 47 views
5

我們正在研究一個擁有一些Clojure-Java互操作的項目。在這一點上,我們有一個具有各種依賴關係的類,我們將這些依賴關係放入Eclipse的用戶庫中進行開發,但當然,這對使用Leiningen(2.x)沒有幫助。我們的大多數依賴項都是專有的,所以它們不在某個存儲庫中。如何配置Leiningen的專有依賴項?

什麼是最簡單/正確的方法來做到這一點?

我見過leiningen - how to add dependencies for local jars?,但它似乎已過時?

更新:所以我做了我的罐子的本地倉庫以下these instructionsthe lein deployment docs on github,和編輯我的project.clj文件是這樣的:

:dependencies [[...] 
       [usc "0.1.0"]] 
:repositories {"usc" "file://maven_repository"} 

哪裏maven_repository是在項目目錄下(因此不使用file:///)。當我跑「雷音DEPS」 - 我得到這個消息:

Retrieving usc/usc/0.1.0/usc-0.1.0.pom from usc 
Could not transfer artifact usc:usc:pom:0.1.0 from/to usc (file://maven_repository): no supported algorithms found 
This could be due to a typo in :dependencies or network issues. 
Could not resolve dependencies 

何謂「不支持的算法發現」,如何解決?

Update2:找到答案的最後一位here

回答

1

將它們添加爲您的leiningen項目的依賴項。你可以製作名字和版本。 然後運行lein deps和錯誤消息,當它找不到它時會給你確切的命令來運行,因此你可以安裝jar到你的本地repo然後你可以決定使用共享repo你可以使用這個相同的進程把你的依賴關係放在那裏。

0

YMMV,但是我在使用Polyglot Clojure/Java項目時發現最好使用Maven而不是Leiningen。

這主要是因爲基於Java的工具(Eclipse等)瞭解Maven項目,但並不真正瞭解Leiningen項目。使用優秀的Counterclockwise Clojure插件可以讓它慢慢變好,但對於基於IDE的高效工作流程來說,集成仍然不夠好。

在存儲庫方面,我建議設置一個私有的共享Maven存儲庫。如果你打算在你的團隊中管理一組複雜的依賴關係,你遲早會需要它:也可以咬緊牙關,現在就完成它。

1

@亞瑟的回答很好,但我想我會充實一點,因爲它會留下一些細節。

  1. 永遠記住Repeatability。如果你不這樣做,那麼任何需要訪問構件的人都可以以標準方式訪問構件,那麼你就需要支持地獄。

  2. documentation on deployment是一個很好的去找出你需要知道的關於部署你的工件的一切。由於您處在多語言環境中,因此您可能無法使用lein來部署所有工件,但至少您可以將clojure特定的jar文件放到S3中,或者如果您願意,也可以將文件共享。其餘的工件將不得不直接使用Maven或Ant將工件上傳到文件服務器或S3上的Maven倉庫。在我目前的公司,我們使用technomancy的優秀s3 wagon private來託管我們的封閉源文物和clojars託管任何我們可以開源的東西。

  3. @Arthur指的是做lein install。只需將當前項目的副本安裝到當地的.m2目錄中,以便方框上的其他項目可以引用它們。除非你已經將你的maven安裝配置爲使用你的.m2文件夾的共享目錄(這可能不是你的環境中的一個壞主意?),這意味着任何檢查出你的項目的人都無法構建它。如果您想要使用此路線,則需要將$M2_HOME/conf/settings.xml中的localRepository節點設置爲您的團隊其餘人員可以訪問的共享位置。有關更多信息,請參見the docs

相關問題