簡體   English   中英

leiningen - 如何為本地jar添加依賴項?

[英]leiningen - how to add dependencies for local jars?

我想用leiningen來構建和開發我的clojure項目。 有沒有辦法修改project.clj告訴它從本地目錄中挑選一些罐子?

我有一些專有的罐子無法上傳到公共回購。

另外,leiningen可以用來維護clojure項目的“lib”目錄嗎? 如果我的一堆clojure項目共享相同的jar,我不想為每個jar維護一個單獨的副本。

謝謝

只需在project.clj文件中使用:resource-paths 我用它,例如連接到Siebel服務器。 剛剛在我的項目目錄中創建了一個資源目錄,並在那里復制了jar文件。 但是當然你可以使用更通用的目錄:

(defproject test-project "0.1.0-SNAPSHOT"
:description "Blah blah blah"
...
:resource-paths ["resources/Siebel.jar" "resources/SiebelJI_enu.jar"])

然后從lein repl我可以創建Siebel數據Bean實例,例如

(def sbl (com.siebel.data.SiebelDataBean.))
(.login sbl "siebelServer" "user" "password")
...

如果你有一個較新的Java版本,你當然可以在你的路徑規范中使用通配符,這樣更通用的目錄:

:resource-paths ["/tmp/SiebelJars/*"]
  1. 在項目中創建一個目錄:

    mkdir maven_repository

  2. 將本地jar添加到此存儲庫:

    例如,此命令將jaad-0.8.3.jar文件添加到maven存儲庫:

    mvn deploy:deploy-file -Dfile=jaad-0.8.3.jar -DartifactId=jaad -Dversion=0.8.3 -DgroupId=jaad -Dpackaging=jar -Durl=file:maven_repository

  3. 將以下內容添加到project.clj

    :repositories {"local" "file:maven_repository"}

  4. 現在一個普通的lein deps應該工作:

    $ lein deps Downloading: jaad/jaad/0.8.3/jaad-0.8.3.pom from local Transferring 0K from local [WARNING] *** CHECKSUM FAILED - Error retrieving checksum file for jaad/jaad/0.8.3/jaad-0.8.3.pom - IGNORING

警告可以忽略,因為jar將被檢入項目而不是從互聯網上下載。

原始來源: 使用Leiningen的本地JAR (自復制后更改)

你可以將你的私人罐放在lib/並且為了lein swank之類的目的,他們會在類路徑上; 這似乎打敗了使用依賴管理工具的重點,但如果你實際上並不想要管理這些依賴項,你可以將Leiningen視為“開源依賴管理工具”,也許要小心lein clean

隨着情況變得更加復雜 - 涉及的私人罐子數量越來越多,它們也在不斷發展,您需要考慮一些版本信息--Arthur創建私有Maven回購的想法可能更合適。


(HR表示Leiningen特定的部分截止點...繼續下面,了解Clojure土地中一般構建/依賴管理工具故事的信息,包括一些我認為在您的情況下可能非常方便的鏈接。)

此外,到目前為止,關於哪個是Clojure的最佳構建工具的問題還沒有達成普遍共識,而Leiningen雖然獲得了大家的關注,但也在不斷獲得領域特征和潤色 - 特別是,它尚未完成。 以下是Pragmatic Bookshelf的“Programming Clojure”的作者Stuart Halloway的引用:“我的2c:Leiningen是重要的一步,但仍有很多工作要做。” 對於完整的發布和一個非常有趣的討論:在Clojure空間中構建工具等,請參閱Leiningen,Clojure和圖書館:我缺少什么? Clojure Google小組的主題。 許多參與者特別提到需要將本地依賴項包含在本地或其他任何存儲庫中,並詳細說明他們為此類方案提出的解決方案。 也許你可以看到那里有什么東西可以解決你現在的問題/將來可能解決它,當功能集成熟時?

無論如何,Leiningen可能實際上還沒有為一些復雜的場景准備好故事。 如果您認為這可能適用於您的情況(我的意思是在您考慮私人回購的想法之后),這里有一些鏈接到基於maven的替代品,取自上面提到的線程: polyglot mavenclojure-maven-plugin ; 這篇博文旨在對試圖與Clojure使用maven的人有用。 我記得,Meikel Brandmeyer(也是他在kotarak的在線句柄上的SO)使用Gradle(一個Groovy構建系統)和一個插件來容納Clojure,稱為Clojuresque; 我自己從未嘗試過,因為不知道關於Groovy的第一件事,但他聲稱用它做了一個非常好的建築行為,我相信它與maven無關 - 這本身就是一個加號本身對於我們中的一些人 :-)

我找到了lein pom; lein jar; lein install lein pom; lein jar; lein install lein pom; lein jar; lein install在開發庫時運行良好。

在正在開發的庫中執行此操作,並且您需要它的應用程序將使用它而不需要:repositories foo。


或者, lein do pom, jar, install稍微簡潔一點。


這允許像任何其他的一樣調用庫:dependencies [[project-name "version"]]

我相信“正確”的方法是創建一個私有Maven存儲庫,以便您可以將jar存儲在一個位置,所有分支等都將獲取更改。 對於你的所作所為,這可能有點過頭了。 我很好奇這些是否更容易。

你可能想使用插件lein-localrepohttps//github.com/kumarshantanu/lein-localrepo

最近的一項發展是Phil為Leiningen推出的s3-wagon-private插件: https//github.com/technomancy/s3-wagon-private

這應該允許您將工件發布到專用遠程倉庫。

這些解決方案都不適合我。 相反,我已經安裝了一個本地存儲庫,並使用maven在本地存儲庫中安裝jar文件,並將本地存儲庫添加到我的project.clj

在命令行中:

mvn deploy:deploy-file -DgroupId=local -DartifactId=bar \
    -Dversion=1.0.0 -Dpackaging=jar -Dfile=bar.jar \
    -Durl=file:repo

我像這樣編寫我的project.clj:

(defproject foo "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [local/bar "1.0.0"]]
  :repositories {"project" "file:repo"})

希望能幫助到你。

[參考: https//gist.github.com/stuartsierra/3062743 ]

也許看一下之前的答案 ,我提供了一步一步的說明來設置項目的本地存儲庫(通過file://訪問),您可以在其中安裝您的jar。

嘗試我的解決方案如何使用依賴項構建jar文件http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html

最好的選擇是設置一個私有的JFrog / Nexus工件並在那里部署你的快照/版本,然后在你的project.clj中將該工程添加為存儲庫

其他更簡單的方法是

靜態HTTP最簡單的私有存儲庫是指向充滿靜態文件的目錄的Web服務器。 如果目錄是運行Leiningen的計算機的本地目錄,則可以在:存儲庫中使用file:/// URL進行部署。

SCP如果您已經使用SSH公鑰設置了服務器,則scp傳輸是一種發布和使用私有依賴項的簡單方法。 將以下內容放在defproject中:

:plugins [[org.apache.maven.wagon/wagon-ssh-external "2.6"]]
:repositories [["releases" "scp://somerepo.com/home/repo/"]]

然后將以下內容放在defproject之外:

(cemerick.pomegranate.aether/register-wagon-factory!
 "scp" #(let [c (resolve 'org.apache.maven.wagon.providers.ssh.external.ScpExternalWagon)]
          (clojure.lang.Reflector/invokeConstructor c (into-array []))))

如果您設置nginx或類似的東西通過HTTP提供存儲庫目錄,也可以使用scp傳輸部署到存儲庫並通過http使用它。

不再支持NB部署到Clojars的NB

原始來源在這里https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md

暫無
暫無

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

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