簡體   English   中英

如何在Clojure中使用本地依賴項?

[英]How to use local dependencies in Clojure?

我正在開發一個庫和一個使用這個庫的應用程序。

我沒有這個庫的任何遠程存儲庫,它只作為常規項目存儲在GitHub上。

在我的應用程序中,我想使用這個庫作為依賴,我正在考慮的是有這樣的結構:

.
├── README.md
├── project.clj
├── repo
├── src
├── target
├── libraries
│   └── my-library
└── test

其中my-librarymy-librarygit submodule 如何讓我的應用程序知道這種依賴?

2016年的解決方案是什么?

不需要將lib包含為git子模塊。 您可以在本地“釋放”my-library項目。

  1. 只需轉到my-library項目文件夾並運行lein pom; lein jar; lein install lein pom; lein jar; lein install lein pom; lein jar; lein install 這里的關鍵部分是lein install ,它將jar和pom安裝到本地存儲庫; 通常為〜/ .m2。

  2. 轉到使用此庫的項目,並在project.clj中將其聲明為依賴項,如:dependencies [[my-library "version"]] ,它應該可以工作。

編輯: Simlarly,如果你使用Boot ,你可以運行boot pom; boot jar; boot install boot pom; boot jar; boot install

通常使用git子模塊或基於本地文件的方法來管理Clojure中的庫。 Clojure利用標准的Java生態系統方法進行庫管理。 通常,這涉及構建和部署庫到公共Maven存儲庫,如Clojars (或Maven Central)。 如果您只在自己的組織中使用它,那么組織級Maven存儲庫還有其他選項。

然后,您可以在自己的項目中使用該庫,將其聲明為所選構建工具中的依賴項。 在Clojure中,最常用的工具是Leiningen,你會聲明使用該庫作為依賴

其他替代方案是Maven(非常類似於Leiningen,但是采用XML格式)或Boot ,它采用了一種不同的方法。

更簡單的解決方案是使用lein checkouts如下所示: https//github.com/technomancy/leiningen/blob/master/doc/TUTORIAL.md#checkout-dependencies

在項目的頂層創建一個dir checkouts出(與src目錄並行)。 checkouts ,只需使用庫代碼創建指向項目目錄的符號鏈接。 例如,考慮一個項目clj和一個庫tupelo

drwxrwxr-x 10 alan alan 4096 Jan  5 12:09 clj/
drwxrwxr-x 11 alan alan 4096 Jan  9 20:01 tupelo/

項目clj看起來像這樣:

> d clj clj/* clj/checkouts/*

drwxrwxr-x 10 alan alan  4096 Jan 12 10:36 clj/
drwxrwxr-x  2 alan alan  4096 Oct 14 09:23 clj/checkouts/
lrwxrwxrwx  1 alan alan    17 Oct 30 16:44 clj/checkouts/tupelo -> /home/alan/tupelo/
drwxrwxr-x  2 alan alan  4096 Aug 31 10:05 clj/doc/
-rw-rw-r--  1 alan alan 11219 Aug 31 10:05 clj/LICENSE
-rw-rw-r--  1 alan alan   794 Jan  5 12:09 clj/project.clj
-rw-rw-r--  1 alan alan   457 Aug 31 10:05 clj/README.md
drwxrwxr-x  2 alan alan  4096 Jan  3 09:01 clj/resources/
drwxrwxr-x  3 alan alan  4096 Aug 31 10:05 clj/src/
drwxrwxr-x  8 alan alan  4096 Nov 14 16:26 clj/target/
drwxrwxr-x  3 alan alan  4096 Sep 29 22:31 clj/test/

現在,在構建clj項目時,它將(總是)使用來自~/tupelo tupelo的源代碼而不是clojars,maven等。這意味着您不必每次都從lib tupelo制作&(重新)安裝jar您進行了要在clj使用的更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM