簡體   English   中英

如何在clojure中導入本地java庫? (雷音)

[英]How do I import a local java library in clojure? (lein)

我正在嘗試使用一個名為DragonConsole的java庫(jar文件),它不在maven central或clojars上。

我想在我的clojure應用程序中導入這個庫,但到目前為止我無法弄清楚如何這樣做。

我嘗試建立一個當地的maven回購,但我認為我做得不對。

lein deps給了我這個錯誤:

(Retrieving dragonconsole/dragonconsole/3.0.0/dragonconsole-3.0.0.pom from local)
(Could not transfer artifact dragonconsole:dragonconsole:pom:3.0.0 from/to local)
(file:/home/michael/clj/enclojed/maven_repository/): no supported algorithms found)

project.clj:

:dependencies [[org.clojure/clojure "1.6.0"]
               [clojure-lanterna "0.9.4"]
               [dragonconsole "3.0.0"]]
:repositories [["local" {:url ~(str (.toURI (java.io.File. "maven_repository")))}]]

項目文件夾:

maven_repository/DragonConsolev3.jar
maven_repository/dragonconsole/dragonconsole/maven-metadata-local.xml
maven_repository/dragonconsole/dragonconsole/3.0.0/dragonconsole-3.0.0.pom
doc/...
src/...
test/...
resources/...
project.clj

如果您需要查看其他任何文件,請查看git頁面

這可能是最簡單的方法。 你有一個〜/ .m2目錄嗎?

1)在project.clj添加你的依賴項,例如:dependencies [[dragonconsole "3.0.0"]]

當你運行lein run/test/etc ,它將嘗試從maven central和clojars中拉出庫,它將在〜/ .m2下為你創建一個路徑,例如~/.m2/repository/dragonconsole/dragonconsole/3.0.0/

注意:如果存在具有相同名稱和版本的庫,只需刪除下載的內容(jar,pom等...)

2)在〜/ .m2的dragonconsole目錄下創建一個指向jar的符號鏈接 ,例如ln -s /path/to/project/dragonconsole-3.0.0.jar ~/.m2/repository/dragonconsole/...

這次當你運行lein run/test/etc它會起作用。 這是我發現的最簡單,最干凈的方法,盡管我沒有太多時間去探索。 我喜歡它,因為您的代碼和構建過程不會發生任何變化(只需要一行來添加依賴項)。

為了生產我會尋找一種方法來添加一個lein存儲庫“source”,所以它看起來是我的自定義倉庫,然后是maven central,然后是clojars。

這是一個簡單明了的描述:

https://www.pgrs.net/2011/10/30/using-local-jars-with-leiningen/

我認為最好的解決方案是評論:

  1. 使用deploy替換安裝
mvn deploy:deploy-file -Dfile=jnotify-0.94.jar -DartifactId=jnotify -Dversion=0.94 -DgroupId=jnotify -Dpackaging=jar -Durl=file:/home/xxx/maven_repository/
  1. 將repo添加到project.clj
:repositories {“local” “file:/home/xxx/maven_repository”}

免責聲明:這個答案詳細說明了如何使用leiningen將本地jar作為依賴項安裝,但我還沒有嘗試使用本機java jar。 但是,方向應該完全相同; 你應該只能通過互操作形式使用庫,就lein而言,你只是安裝另一個jar文件。

在lein 2中,導入jar的唯一方法是使用maven存儲庫,因此您需要創建一個本地maven存儲庫。 我使用以下命令安裝jar文件。 這些命令是UNIX,但它們捕獲的想法應該適用於任何帶有java / maven的操作系統。

首先,我為本地存儲庫創建一個目錄:

mkdir -p ${HOME}/.local/var/lein_repo

然后我使用此命令將jar文件安裝到存儲庫中:

mvn deploy:deploy-file \                                                        
    -Dfile=${name}-${version}.jar \                                             
    -DartifactId=${name} \                                                      
    -Dversion=${version} \                                                      
    -DgroupId=${name} \                                                         
    -Dpackaging=jar \                                                           
    -Durl=file:/home/djhaskin987/.local/var/lein_repo

最后,我將此行添加到我的本地lein文件中:

:repositories {"local" ~(str (.toURI (java.io.File. "/home/djhaskin987/.local/var/lein_repo")))}

然后我運行lein deps以確保一切正常。 注意最后一行:它從local存儲庫獲取版本為0.1.0-SNAPSHOTclj-ga jar。

[ djhaskin987@localhost:~/Workspace/ulam ]$ lein deps
Retrieving org/clojure/clojure/1.5.1/clojure-1.5.1.pom from central
...
Retrieving clj-ga/clj-ga/0.1.0-SNAPSHOT/clj-ga-0.1.0-20140718.032154-1.jar from local

我想出了如何從像這個github gist這樣的地方做到這一點

或者,您可以查看lein-localrepolein的插件來做這種事情。

暫無
暫無

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

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