web-dev-qa-db-ja.com

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

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

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

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

ありがとう

110
signalseeker

プライベートjarをlib/に配置すると、lein swankなどの目的でクラスパスに配置されます。これは、依存関係管理ツールを使用するポイントを無効にしているように見えますが、実際にwantこれらの依存関係を管理しなければ、ライニンゲンを「オープンソースの依存関係管理ツール」。おそらくlein cleanに注意してください。

状況がより複雑になると、より多くのプライベートjarが関係するため、進化し、それらのバージョン情報を考慮する必要があります-プライベートMavenリポジトリを作成するというアーサーのアイデアは、より適切かもしれません。


(HRは、ライニンゲン固有のパーツのカットオフポイントを意味します... Clojureランドでの一般的なビルド/依存関係管理ツールのストーリーに関する情報については、以下に進みます。あなたの状況で非常に便利です。)

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

とにかく、Leiningenが実際にいくつかの複雑なシナリオに対応できる良いストーリーをまだ持っていない可能性があります。これがあなたのケースに当てはまると思う場合(そしてプライベートリポジトリアイデアを検討した後)、上記のスレッドから取ったMavenベースの代替へのリンクを次に示します。 polyglot maven 、- clojure-maven-plugin ; このブログ投稿 は、Clojureでmavenを使用しようとしている人々に役立つことを目的としています。私が思い出すように、Meikel Brandmeyer(コタラクの彼のオンラインハンドルの下でもSO)は、Clojuresqueと呼ばれるClojureに対応するプラグインでGradle(Groovyビルドシステム)を使用します。 Groovyについて最初に知っていることはありませんが、Groovyを使用して非常に素晴らしい建物を運営すると主張しており、mavenとは何の関係もないと考えています。 )

36
Michał Marczyk

Project.cljファイルで:resource-pathsを使用するだけです。私はそれを使用します、例えばSiebelサーバーに接続します。プロジェクトディレクトリにresourcesディレクトリを作成し、そこに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/*"]
61
Hans-J.
  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を使用(コピー以降に変更)

48
Janus Troelsen

lein pom; lein jar; lein installは、ライブラリを開発するときにうまく機能します。

開発中のライブラリでこれを行うと、それを必要とするアプリケーションは:repositories fooが必要です。


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


これにより、他の:dependencies [[project-name "version"]]

29
Greg B

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

14
Arthur Ulfeldt

プラグインlein-localrepohttps://github.com/kumarshantanu/lein-localrepo

9
Shantanu Kumar

最近の開発はフィルのs3-wagon-private Leiningenのプラグイン: https://github.com/technomancy/s3-wagon-private

これにより、アーティファクトをプライベートリモートリポジトリに公開できます。

4
phyzome

多分これを見てください 前の回答 、プロジェクトにローカルなリポジトリをセットアップするためのステップバイステップの手順を提供します(file://)jarをインストールできます。

2
Pascal Thivent

これらの解決策のどれも私には役に立たなかった。代わりに、ローカルリポジトリをインストールし、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/306274 ]

2

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

他の簡単な方法は

静的HTTP最も単純な種類のプライベートリポジトリは、静的ファイルでいっぱいのディレクトリを指すWebサーバーです。ディレクトリがLeiningenが実行されているマシンに対してローカルである場合、:repositoriesで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 []))))

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

N.B. ClojarへのSCPの展開はサポートされなくなりました

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

0
Robin

依存関係のあるjarファイルを構築する方法を私のソリューションで試してみてください http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html

0
mike