ライニンゲン-ローカルjarの依存関係を追加する方法?


117

レイニンゲンを使用して、clojureプロジェクトを構築および開発したいと考えています。ローカルディレクトリからいくつかのjarを選択するように指示するようにproject.cljを変更する方法はありますか?

公開リポジトリにアップロードできない独自のjarファイルがいくつかあります。

また、leiningenを使用してclojureプロジェクトの「lib」ディレクトリを維持できますか?私のclojureプロジェクトの多くが同じjarファイルを共有している場合、それらのプロジェクトごとに個別のコピーを保持する必要はありません。

ありがとう


1
みんな、ありがとう。私の皆が指摘したように、これは厄介な問題であり、現時点では明確な答えはありません。
signalseeker

回答:


38

あなたはあなたのプライベートなjarを入れることができlib/、それらは目的などのためにクラスパスにありますlein swank; これは、依存関係管理ツールを使用するポイントを打ち負かすように見えますが、実際にそれらの依存関係を管理したくない場合は、Leiningenを「オープンソースの依存関係管理ツール」として扱い、に注意することができますlein clean

状況がより複雑になると、関係するプライベートjarの数が増え、進化し、それらのバージョン情報を考慮する必要があります-プライベートMavenリポジトリを作成するというアーサーのアイデアの方が適切な場合があります。


(人事部はライニンゲン固有の部品カットオフポイントを示しています... Clojureランドでの一般的なビルド/依存関係管理ツールストーリーの情報については、以下で続けてください。あなたの状況で非常に役立つと思われるいくつかのリンクを含みます。)

また、現時点では、Clojureに最適なビルドツールがどれであるかについての普遍的な合意はありません。ライニンゲンは、マインドシェアを獲得しながら、機能と洗練の分野でも常に獲得しています。つまり、特にまだ完成していません。Pragmatic Bookshelfの「Programming Clojure」の作者であるStuart Hallowayからの引用は次のとおりです。「My 2c:Leiningenは重要なステップですが、まだやることはたくさんあります。」完全な投稿と非常に興味深いディスカッションについては、Clojureスペースでのツールなどのビルドについては、Leiningen、Clojure、およびライブラリーを参照してください。何が欠けていますか?Clojure Googleグループのスレッド。多くの参加者は、ローカルまたはその他のリポジトリに含まれていないローカルの依存関係が必要であると具体的に述べており、そのようなシナリオで考え出したソリューションについて詳しく説明しています。おそらく、機能セットが成熟したときに、今すぐ問題を解決できるものがあるかどうか、または将来解決できる可能性があるかどうかを確認できますか?

とにかく、いくつかの複雑なシナリオのために、ライニンゲンが実際にまだ良いストーリーを準備していない可能性があります。これがあなたのケースに当てはまると思われる場合(つまり、プライベートリポジトリのアイデアを検討した後)、上記のスレッドから取得したmavenベースの代替案へのリンクをいくつか示します。polyglot mavenclojure-maven-plugin ; このブログ投稿ClojureでMavenを使用しようとしている人々に役立つことを目指しています。私が覚えているように、Meikel Brandmeyer(同じく彼のkotarakのオンラインハンドルの下のSO)は、Gradle(Groovyビルドシステム)をプラグインと共に使用して、Clojuresqueと呼ばれるClojureに対応しています。Groovyの最初のことを知らないので、私は自分で試したことはありませんが、Groovyを使用して非常に優れた建築行為を実行していると主張し、Mavenとは何の関係もないと信じています-それ自体がプラスです私たちの一部のために。:-)


2
Re:「Clojureに最適なビルドツールがどれであるかという問題について、普遍的な合意はありません」...今日の時点では、ライニンゲンが暴走する標準になっているようです。2013年の調査結果:lein-survey-2013.herokuapp.com/results
David J.

8
Leiningen v2の時点で、lib /ディレクトリ機能は削除されました。参照:github.com/technomancy/leiningen/wiki/...
Jared314

今日の時点では、おそらくライニンゲンがまだ最も人気がありますが、ブートも人気があります。
火星

64

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 Data Beanインスタンスを作成できます。

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

新しいJavaバージョンを使用している場合は、もちろん、パス指定で次のようにワイルドカードを使用して、より一般的なディレクトリを作成できます。

:resource-paths ["/tmp/SiebelJars/*"]

Lein 2はグロビングをサポートしていませんが、必要に応じてgithub.com/dchelimsky/lein-expand-resource-pathsプラグインを利用できます。
圧倒的な

2
これは私が今まで見た中で最良の答えです。ローカルのmvn installが動作しなくなったようです。
デビッドウィリアムズ

7
これは、uberjarでは依存関係クラスファイルを追加する代わりに、jarに依存関係jarを追加するため、uberjarでは機能しません。
Tobias Domhan 2015

50
  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の使用(コピー以降変更)


このリンクで素晴らしいステップ。これはとても役に立ちました。
goger、

2
新しいバージョンでは、install:install-fileの代わりにmvn deploy:deploy-fileを使用し、-DlocalRepositoryPath = repoの代わりに-Durl = file:repoを指定することができます。projects.cljでは、その後、使用することができます:リポジトリ{「ローカル」「ファイル:maven_repository」}を参照してください:gist.github.com/stuartsierra/3062743(私は質問を編集し、まだ承認される必要がある)
トビアスDomhan

33

lein pom; lein jar; lein installライブラリを開発するときにうまくいくことがわかりました。

開発中のライブラリでこれを行うと、それを必要とするアプリケーションは、:repositoriesfooを必要とせずにそれを使用します。


または、lein do pom, jar, installもう少し簡潔です。


これにより、他のライブラリと同様にライブラリを呼び出すことができます :dependencies [[project-name "version"]]


3
他のソリューションと比較して、これはとてもシンプルで機能します!mavenをインストールする必要はありません。ありがとう。
dkinzer 2013

レインプロジェクトファイルで結果のjarをどのように参照しますか?
インター

他のように:dependencies [[project-name "version"]]
ロボリ2014

1
これはWindowsでも同様に機能します。すでに述べたように、mavenをインストールする必要はありません。WindowsのIntelliJ + Cursiveで試してみましたが、完全に機能します。Windowsコマンドラインで「lein pom、lein jar、lein install」を実行しました。
endbegin

4
あなただけを行う必要がありますlein install。それはあなたのために瓶とポンを構築します。
neverfox

15

「正しい」アプローチは、jarを単一の場所に格納でき、すべてのブランチなどが変更を取得できるように、プライベートMavenリポジトリ作成することだと思います。これは、あなたがやっていることに対してはやり過ぎかもしれません。これらがより簡単な方法であるかどうか私は興味があります。


5
よろしくお願いします。メイベンは私の心に恐怖を感じさせると言わざるを得ませんが。それを行うための簡単なステップバイステップの例を知っているなら、私にそれを指摘してください。なぜJavaの世界ではビルドがそんなに複雑なのですか?
シグナルシーカー、2010年



3

これらの解決策のどれも私に役立ちませんでした。代わりに、ローカルリポジトリをインストールし、mavenを使用してjarファイルをローカルリポジトリにインストールし、ローカルリポジトリを私のプロジェクトに追加しました。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 ]


2

たぶんこの前の答えを見てfile://ください。jarをインストールできるプロジェクト(からアクセス)にローカルなリポジトリをセットアップするための手順を順を追って説明します。



0

最良のオプションは、プライベートJFrog / Nexusアーティファクトをセットアップし、そこにスナップショット/リリースをデプロイしてから、そのアーティファクトをリポジトリとしてproject.cljに追加することです。

他のより簡単な方法は

静的HTTP最も単純な種類のプライベートリポジトリは、静的ファイルでいっぱいのディレクトリを指すWebサーバーです。:repositoriesでfile:/// URLを使用して、ディレクトリがLeiningenが実行されているマシンのローカルにある場合は、そのようにデプロイできます。

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 []))))

HTTP経由でリポジトリディレクトリを提供するようにnginxまたは同様のものを設定している場合は、scpトランスポートを使用してリポジトリにデプロイし、http経由でそれを使用することもできます。

注意:SCPのClojarsへの展開はサポートされなくなりました

元のソースはこちらhttps://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.