Clojure

Clojure CLI リファレンス

インストール

Clojure CLIは、プラットフォームに応じて、Homebrew、bash/posixスクリプト、またはPowershellを介してインストールできます。詳細についてはインストールガイドを、バージョン情報についてはリリースページを参照してください。より詳細なチュートリアルについては、ガイドを読むこともできます。アーティファクトの構築については、tools.buildガイドをご覧ください。

Clojure CLIのどのバージョンでも、Clojure言語のどのバージョンでも使用できます。一般的には、最新の機能と修正プログラムを利用するために、CLIの最新バージョンを使用するのが最善です。CLIバージョンA.B.C[.D]の場合、REPLで使用されるデフォルトのClojureのバージョンはA.B.Cになりますが、依存関係に古い(または新しい!)言語のバージョンを指定することもできます。

使用方法

CLIは、clojureまたはcljのいずれかを介して起動されます。一般的に、これらは同じように扱うことができますが、cljには、拡張キーボード編集用のrlwrapが含まれており、特にREPLで役立ちます。このリファレンスでは、REPLの例にはcljを、REPL以外の例にはclojureを使用します。

Clojure CLIの各実行では、すべてのパス、依存関係、およびメインエントリポイントを決定し、JVM上でプログラムを起動することにより、Clojureプログラムを実行します。実行の主な種類は、-X-T、および-M(またはそれらの不在)によって決まります。設定は、1つ以上のdeps.ednファイルとコマンドラインオプションの組み合わせによって定義されます。

主要コマンド

REPLを開始する(デフォルト)
clj [clj-opts] [-Aエイリアス]

関数を実行する (-X)
clojure [clj-opts] -X[エイリアス] my/fn? [キープアス 値 …​] kv-map?

ツールを実行する (-T)
clojure [clj-opts] -T[名前|エイリアス] my/fn [キープアス 値 …​] kv-map?

メイン名前空間またはスクリプトを実行する (-M)
clojure [clj-opts] -M[エイリアス] [初期化オプション] [メインオプション] [引数]

オプション一覧

exec-opts:
 -Aaliases    Apply aliases
 -X[aliases]  Invoke function, using aliases
 -Ttoolname   Invoke tool by local name
 -T[aliases]  Invoke tool using aliases
 -M[aliases]  Invoke clojure.main, using aliases
 -P           Prepare deps but don't exec

clj-opts:
 -Jopt        Pass JVM option
 -Sdeps EDN   Extra deps.edn data
 -Srepro      Ignore user deps.edn file
 -Spath       Compute and echo classpath
 -Stree       Print dependency tree
 -Scp CP      Use this classpath, ignore deps.edn
 -Sforce      Force classpath computation
 -Sverbose    Print path info
 -Sdescribe   Print env and command parsing info
 -Sthreads    Set specific number of download threads
 -Strace      Write dep expansion trace.edn
 --version    Print version to stdout and exit
 -version     Print version to stderr and exit
 --help -h -? Print this help message

Programs provided by :deps alias:
 -X:deps list          Print deps list+licenses
 -X:deps tree          Print deps tree
 -X:deps find-versions Find available lib versions
 -X:deps prep          Prepare all unprepped libs in deps
 -X:deps mvn-pom       Generate pom.xml for deps.edn
 -X:deps mvn-install   Install maven jar to local repo

REPLを開始する

Clojure REPLを開始するには、このオプションを使用します。

clj [clj-opts] [-Aaliases]

REPLを実行するには、引数なしでcljを起動します。

これは、deps.ednの有無にかかわらず、任意のディレクトリで機能します。プロジェクトディレクトリにいない場合、使用されるClojureのバージョンは、ルートdeps.ednのorg.clojure依存関係のClojure言語バージョン(CLIバージョン番号のバージョン番号と一致します)または設定ディレクトリのユーザーdeps.edn(通常は指定されません)によって異なります。

クラスパスまたはJVMプロパティを変更するエイリアスを指定するには、-Aを1つ以上の連結されたエイリアスキーワードと共に使用します。

clj -A:test

clj -A:test:dev

関数を実行する (-X)

Clojure CLIは、プロジェクトクラスパス上の、マップ内のキーワード引数を入力として受け取る任意の関数を実行できます。

clojure [clj-opt*] -X[aliases] [a/fn] [kpath v]* kv-map?

関数の実行には、最終的に次の情報が必要です。

関数とその引数は、エイリアス内のデータ、および/またはコマンドラインで指定できます。

エイリアスには、次の引数マップキーを含めることができます。

  • :exec-fn - コマンドラインで何も指定されていない場合に使用する関数シンボル

  • :exec-args - exec-fnの実行時に含めるキーと値のマップ

  • :ns-default - exec-fnの解決時に使用するデフォルトの名前空間シンボル

  • :ns-aliases - exec-fnの解決時に使用するエイリアスシンボルと名前空間シンボルのマップ

呼び出す関数が指定されたエイリアスで定義されている場合、コマンドラインでは関数はオプションです。コマンドラインで関数シンボルが指定されている場合、エイリアス内の:exec-fnをオーバーライドし、エイリアス内の:ns-default:ns-aliasesに基づいて解決されます。

:exec-argsは、コマンドラインのキーと値、および末尾のkv-mapとマージされる基本マップを形成し、その順序でマージされます。

コマンドラインのキーは、キーワード、またはネストされたキーを指定するためのベクターキープアス(assoc-inで使用されるもの)のいずれかです。コマンドラインの最後の引数は、キーと値のオプションの末尾マップです。ednキーと値を正しく指定する方法の詳細については、キーとキープアスおよびクォートに関する後続のセクションを参照してください。

ツールを実行する (-T)

ツールは、プロジェクトクラスパス外の関数です。-Tを使用してツール関数を実行することは、-Xを使用してプロジェクト関数を実行することと同じですが、プロジェクトクラスパスは含まれません。

clojure [clj-opt*] -T[name|aliases] a/fn [kpath v]* kv-map?

ツールのクラスパスを構築する場合、プロジェクトの:deps:pathsは含まれません。

ツールの依存関係は、ツールエイリアスまたはツール名のいずれかを介して含まれます。ツールは、使用するために短い名前でローカルにインストールできます。インストールされたツールは、同じユーザー構成を持つ任意のプロジェクトで使用できます。詳細については、ツールのインストールを参照してください。

ツールを名前で実行するには、-Tlinterのように-Tツール名を使用します。エイリアスでツールを実行するには、-T:linterを使用します(エイリアスは常にキーワードです)。

-Xとは異なり、ツール関数はコマンドラインで指定する必要があり、ツールエイリアスまたはインストールされたツール構成では指定できません。それ以外の場合、ツール関数と引数は、エイリアスとコマンドラインの両方で-Xと同じように指定されます。

メイン名前空間またはスクリプトを実行する (-M)

-M実行オプションを使用してclojure.mainを呼び出すことができ、これにより-main関数またはClojureスクリプトを持つ名前空間を呼び出すことができます。

clojure [clj-opt*] -M[aliases] [main-opts]

-Mエイリアスはdeps.ednからプルされ、結合されて引数マップを形成します。引数マップは、クラスパスを変更したり、文字列メインオプションのベクターである:main-optsを提供したりできます。使用可能な引数の詳細については、clojure.mainページを参照してください。

一般的な使用方法

# run single expression:
clojure -M -e '(+ 1 1)'

# run Clojure namespace with main entry point:
clojure -M -m my.app

# run standalone Clojure script
clojure -M script.clj

メインオプションは、引数マップキー:main-optsを使用してエイリアスで指定できます。エイリアスがマージされると、指定された:main-optsは以前のエイリアスからのものを置き換えます。-Mの後にあるコマンドラインの追加オプションは、マージされたエイリアス引数マップにあるオプションに追加されます。

オプション

-Aエイリアス

-Aは、1つ以上の連結されたエイリアスを受け取ります。エイリアスは常に単純または修飾されたキーワードです(例:-A:testまたは-A:test:perf/benchmark)。

-Aはすべての実行コマンドで使用できますが、REPL実行で使用できる唯一の実行オプションであり、それが最も一般的な使用理由です。

-X[エイリアス]

-Xは、1つ以上の連結されたエイリアスを受け取ります。エイリアスは常に単純または修飾されたキーワードです(例:-X:testまたは-X:test:perf/benchmark)。

-X実行オプションは関数の実行を示し、-Xの後のすべての引数は、その実行コンテキストによって定義されます。すべてのclj-opts(-S-Pなど)は、-Xの前に配置する必要があります。

-Tツール名、-T[エイリアス]

-Tは、ツール名(常にシンボルであり、キーワードではありません)または1つ以上の連結されたエイリアスを受け取ります。エイリアスは常に単純または修飾されたキーワードです(例:-T:testまたは-T:test:perf/benchmark)。

-T実行オプションはツールの実行を示し、-Tの後のすべての引数は、その実行コンテキストによって定義されます。すべてのclj-opts(-S-Pなど)は、-Tの前に配置する必要があります。

-M[エイリアス]

-Mは、1つ以上の連結されたエイリアスを受け取ります。エイリアスは常に単純または修飾されたキーワードです(例:-M:testまたは-M:test:perf/benchmark)。

-M 実行オプションは clojure.main の実行 を示し、-M 以降のすべての引数はその実行コンテキストによって定義されます。すべての clj オプション(-S-P など)は -M の前に配置する必要があります。

-P

他の実行オプション(-A-X-M-T)の前に -P を使用すると、依存関係の完全な展開、依存関係のダウンロード、クラスパスのキャッシュが行われますが、関数、ツール、mainなどは実際には実行されません。

-Jopt

プログラムに提供する必要がある JVM オプションの前に -J を付けて使用します(-J は削除されます)。たとえば、-J-Xmx1g-J-XX:+HeapDumpOnOutOfMemoryError などです。 -J は、プログラムを実行するすべての実行モード(REPL、-X-T-M)で使用できます。

JVM オプションを提供する他の方法の詳細については、JVM オプション も参照してください。

-Sdeps deps

-Sdeps を使用して、コマンドラインで追加の deps.edn ソースを提供します。これは、マージにおける最後の deps ソース として使用されます。 deps データは、コマンドラインに合わせて適切に クォート する必要があります。

-Srepro

-Srepro を使用すると、deps ソースからユーザーの deps.edn が省略されます。これにより、ユーザー固有の構成が省略され、コマンドが他のユーザーに対して再現可能になります。

Clojure deps ソース

-Spath

-Spath を使用すると、クラスパスが計算され、出力されます。

-Stree

-Stree を使用すると、依存関係ツリーが計算され、出力されます。ツリー出力の詳細については、依存関係の展開 ページを参照してください。

-Scp CP

このオプションを使用すると、クラスパスは計算されず、代わりに提供されたクラスパスが使用されます。これは、主にテストまたはデバッグに役立ちます。一般的には、Clojure CLI が deps.edn 設定に基づいてクラスパスを計算(およびキャッシュ)するようにする必要があります。

-Sforce

このフラグは、既存のキャッシュされたクラスパス(存在する場合)を古いものとしてマークします。クラスパスは再計算され、キャッシュされます。

-Sverbose

Clojure CLI によって検出および使用される環境とパス情報を出力します。これは、主にさまざまな設定ディレクトリとキャッシュディレクトリの場所をデバッグするのに役立ちます。

このフラグは、コマンドラインで指定されている可能性のある他の実行を変更しないため、特定のコマンドのキャッシュファイルの場所をデバッグするために使用できます。

-Sdescribe

構成設定を edn データとして出力して終了します。これは -Sverbose と機能が重複しますが、プログラムによる使用に役立つ場合があります。

-Sthreads N

デフォルトでは、依存関係の展開はプロセッサ数に基づいてサイズ設定されたスレッドプールを使用して行われます。この設定を使用して、展開中に使用されるスレッド数を変更します。1 に設定すると、単一スレッドで直列に展開が行われます。

-Strace

-Stree または -X:deps tree によって出力される依存関係ツリーには、特定のライブラリまたはライブラリバージョンが選択された理由をデバッグするのに十分な情報が含まれていることがよくあります。ただし、さらに情報が必要な場合は、このフラグを使用すると、Ask Clojure で tools.deps に関する問題を報告する際に使用できる、trace.edn ファイルに非常に大きな情報が出力されます。

--version, -version

Clojure CLI のバージョンを stdout(--version)または stderr(-version)に出力します。Clojure CLI のバージョンは、実行で使用されるデフォルトの Clojure バージョンを決定しますが、CLI のどのバージョンでも Clojure のどのバージョンでも使用でき、Clojure のバージョンは deps.edn ファイルで設定して変更できることに注意してください。

バージョンと変更ログの詳細については、ツールのリリース ページを参照してください。

--help, -h, -?

コンソールにヘルプを出力します。 man clojure も参照してください。

エイリアス

プロジェクトのコンテキストでコマンドを呼び出す場合、コマンドラインでクォートするのが難しい複雑なデータを指定する必要があることがよくあります。Clojure プログラマーとして、私たちは Clojure 構文(edn)でそのデータを指定することを強く好みます。 deps.edn ファイル形式では、任意の Clojure データを定義し、エイリアス を使用してそのデータに名前を付けることができます。エイリアスは、edn データに名前を付ける単なるキーワードです。

Clojure CLI の各実行モードには、多くの構成オプション(「引数マップ」)があります。これらは、エイリアスを介して edn マップで定義し、-A-X-T、または -M のエイリアスを使用してコマンドラインで選択できます。以下は、すべての引数マップキーのリストです。特に明記されていない限り、これらはすべての実行モードで有効です。

  • プロジェクトの依存関係修飾子

    • :extra-deps - ルートの依存関係に追加する必要がある、ライブラリから座標へのマップ

    • :override-deps - ルートの依存関係の依存関係を**置き換える**必要がある、ライブラリから座標へのマップ

    • :default-deps - ルートまたは推移的な依存関係で座標が nil の場合に使用する必要がある、ライブラリから座標へのマップ

  • クラスパス修飾子

    • :extra-paths - ベースパスにプリペンドする文字列パスのベクトル(または同じキーワードエイリアス)

    • :classpath-overrides - クラスパス上のライブラリを置き換える、ライブラリから文字列パスへのマップ

  • ツールの依存関係とパス(主に -T で使用)

    • :replace-deps (同義語: :deps) - プロジェクトの依存関係を**置き換える**必要がある、ライブラリから座標へのマップ

    • :replace-paths (同義語: :paths) - プロジェクトのパスを**置き換える**必要があるパス文字列のベクトル

  • JVM オプション

    • :jvm-opts - jvm オプションとして渡す文字列のベクトル

  • 名前空間解決(主に -X と -T で使用)

    • :ns-aliases - シンボル(:exec-fn など)を解決するために使用される、エイリアスシンボルから名前空間シンボルへのマップ

    • :ns-default - 修飾されていないシンボル(:exec-fn など)のデフォルトの名前空間

  • 関数の実行(-X と -T のみ)

    • :exec-fn - -X で実行する関数

    • :exec-args - -X に渡す関数の引数(コマンドラインでオーバーライド可能)

  • main(-M のみ)

    • :main-opts - clojure.main に渡す文字列引数のベクトル

複数のエイリアスが指定されている場合、エイリアス引数マップのキーは、以下のセマンティクスでマージされます(連結されたエイリアスで指定された順序で)

  • :extra-deps - マージ

  • :override-deps - マージ

  • :default-deps - マージ

  • :extra-paths - 連結して重複を削除

  • :classpath-overrides - マージ

  • :replace-deps / :deps - マージ

  • :replace-paths / :paths - 連結して重複を削除

  • :jvm-opts - 連結

  • :ns-aliases - マージ

  • :ns-default - 置き換え(最後のものが優先)

  • :exec-fn - 置き換え(最後のものが優先)

  • :exec-args - マップの場合はマージ、そうでない場合は置き換え

  • :main-opts - 置き換え(最後のものが優先)

カスタム目的でのエイリアスの使用

上記のエイリアスキーは Clojure CLI の実行にとって意味がありますが、任意の目的でエイリアスを定義できます。構成が必要なカスタムツールを作成する場合は、ツールで使用する、よく知られている名前空間付きエイリアスまたはエイリアスキーを定義することをお勧めします。 deps.edn ファイルにトップレベルキーを追加することは控えてください。プログラムツールでは常に使用できるとは限りません。

Clojure CLI によって実行されるプログラムには、すべてのエイリアスデータを含む、実行の「ランタイムベース」が提供されます。Clojure 1.12 で追加される clojure.java.basis API を使用すると、プログラムの実行時にエイリアスデータを取得できます。

名前空間解決

実行オプションまたは引数マップのシンボル(:exec-fn など)は、以下のルールで解決されます

  • 関数が修飾されていない場合は、引数マップの :ns-default キーの名前空間を使用します(ない場合はエラー)

  • 関数が修飾されていて、修飾子が引数マップの :ns-aliases にエイリアスとして存在する場合は、その名前空間を使用します

  • それ以外の場合は、完全修飾関数シンボルを使用します

依存関係

各依存関係は、deps.edn 形式でライブラリと座標を使用して定義され、複数の依存関係がマップにまとめられます(エイリアス引数マップキーは同じ形式を使用します)。

deps.edn ソース

Clojure CLI は、最大4つの deps edn ソース を組み合わせて、使用するパス、依存関係、およびエイリアスのマップを構築します

  • ルートの依存関係 - tools.deps ライブラリに埋め込まれたリソースとして定義され、Clojure 自身を唯一の依存関係として定義します(バージョンは Clojure CLI のバージョンと一致します)。また、2つの組み込みエイリアス(:deps:test)も定義します。2つの組み込み Maven リポジトリ(Maven Central と Clojars)が含まれています。

  • ユーザーの依存関係(オプション) - ユーザー設定ディレクトリ にある deps.edn ファイル。このファイルは空で始まりますが、プロジェクトをまたがる追加の構成とツールが定義されている場合があります。

  • プロジェクトの依存関係(オプション) - 現在のディレクトリ(別名 プロジェクトディレクトリ)にある deps.edn

  • 追加の依存関係(オプション) - -Sdeps を使用してコマンドラインで提供される

deps ソースは、上記にリストされている順序で単一のマスター deps edn にマージされます。ただし、以下の場合は除きます。

  • -T ツールの実行 - プロジェクトの :deps は削除され、プロジェクトの :paths は ["."] に置き換えられます

  • -Srepro - ユーザーの :deps は無視されます

マージは本質的に merge-with merge ですが、:paths については最後の deps ソースの :paths のみが使用されます。

クラスパス

JVM クラスパスは、ディレクトリパスまたは jar ファイルへのパスである一連のルートで構成されます。クラス(および Clojure ファイル)は、パッケージまたは名前空間を介して、クラスパスルートに対する相対パスにマップされます。たとえば、java.lang.String クラスはパス java/lang/String.class にあり、clojure.set Clojure 名前空間はパス clojure/set.class(AOT の場合)、clojure/set.clj、または clojure/set.cljc にあります。 JVM がこれらのファイルのいずれかをロードする必要がある場合、各ルートで相対パスを検索し、見つかったらロードします。

Clojure CLI は、以下の要素に基づいてクラスパスを計算します。

最終的に、これらはすべて以下にまとめられます。

  • プロジェクトパス

  • 依存関係(外部ライブラリとその推移的な依存関係)

プロジェクトパス

依存関係とエイリアスの引数のマージ後、deps.edn からの :paths とエイリアスからの :extra-paths が存在します。これらはどちらもベクトルで構成され、これらのベクトル内の順序は保持されます。追加パスは常にパスの前に配置されるため、エイリアスはプロジェクト設定をオーバーライドできます。

プロジェクトパスと追加パスの両方が現在のディレクトリを基準にして解決され、プロジェクト内のパスのみを参照し、親ディレクトリまたは兄弟ディレクトリは参照しないことに注意してください。現在、プロジェクト外の参照は警告を発しますが、このサポートは非推奨であり、将来削除されます(代わりにローカルの依存関係を使用してください)。

依存関係の展開

依存関係がマージされると、トップレベルの依存関係のセットがあり、これらが依存関係グラフのルートを形成します。グラフはトップダウンで探索され、各依存関係は適切な プロキュア(Maven、Git、ローカル)を使用して順番に展開されます。循環が検出されると、再度検査されることはありません。

同じライブラリの複数のバージョンが見つかった場合、バージョン選択プロセスが発生します。依存関係の展開ページには、このプロセスの詳細が記載されていますが、一般的にはライブラリの最新バージョンが使用されます。ただし、トップレベルの依存関係のバージョンは常に変更されずに使用されます。特定のバージョンを指定したり、競合を解決する必要がある場合は、トップレベルの依存関係でバージョンを設定します。

依存関係は、上からグラフの深さで順序付けられ、各レベルでライブラリ名でアルファベット順にソートされます。

:extra-deps:override-deps:default-deps などの arg マップ修飾子の詳細については、deps.edn リファレンスページを参照してください。

クラスパスの構築

クラスパスには以下が含まれます。

  • 追加パス(プロジェクトを基準)、最後に指定したエイリアスで宣言された順序

  • ソースパス(プロジェクトを基準)、最後に指定した依存関係で宣言された順序

  • 依存関係パス(通常は絶対パス)、適切なプロキュアのダウンロード場所にある jar またはディレクトリを参照

    • 依存関係は、依存関係グラフの最上位から深さに基づいて順序付けられ、次にライブラリ名でアルファベット順にソートされます

クラスパスは、arg マップキー :classpath-overrides によってさらに変更される場合があります(deps.edn リファレンスを参照)。

計算されたクラスパスは、-Spath を使用して出力できます。

JVM プロパティ

JVM プロパティにはいくつかのソースがあります

  • ハードコードされたオプション: -XX:-OmitStackTraceInFastThrow

  • $JAVA_OPTS 環境変数

  • エイリアス arg マップキー :jvm-opts (マスター依存関係のエイリアス全体でマージされます)

  • コマンドライン -J オプション

すべての JVM コマンドラインオプションは上記の順序で連結されます。ほとんどの場合、コマンドラインの後の方にある JVM オプションは以前の設定をオーバーライドしますが、すべての場合において、連結されたオプションのセマンティクスは JVM のセマンティクスです。オプションの重複排除または置換はありません。

CLI コマンド

clj および clojure コマンドは、ホスト固有のスクリプトであり、以下の処理を実行します。

  1. CLI 引数を解析する

  2. (キャッシュされていない場合)JVM を起動してクラスパスとその他の設定を計算およびキャッシュする

  3. JVM を起動して、実行オプション -X-T-M で指定されたユーザー プログラムを実行する

ステップ 2 は、Clojure CLI インストールの一部である uberjar を使用して実行されます。一般に、この JVM のクラスパスまたは構成を制御することはできません(ただし、いくつかの例外については 環境変数 を参照してください)。

Java

Clojure CLI を使用するには、Java をインストールし、いくつかの方法で利用できるようにする必要があります。Java 8 以降が必要です。どの Java ディストリビューションでも動作します。

Java は、以下の順序でチェックされます。

  • $JAVA_CMD 環境変数

  • $PATH 上の java

  • $JAVA_HOME/bin/java

見つからない場合、CLI はエラー メッセージを表示して停止します。 clj -h が正常に完了した場合、Java 実行可能ファイルが見つかりました。

ディレクトリとキャッシュ

Clojure CLI では、いくつかの重要なディレクトリが使用されます。このセクションでは、それらの計算方法について詳しく説明します。

プロジェクト ディレクトリ

プロジェクトディレクトリは現在のディレクトリです。プロジェクトディレクトリに deps.edn ファイルが含まれている場合、それが プロジェクトの依存関係ソース として使用されます。

リモートプロジェクトディレクトリのコンテキストで実行するためのオプションはありません。

設定ディレクトリ

設定ディレクトリには以下が含まれます。

設定ディレクトリは次のように計算されます

  • $CLJ_CONFIG が設定されている場合、そのパスを使用します

  • $XDG_CONFIG_HOME が設定されている場合、$XDG_CONFIG_HOME/clojure を使用します

  • それ以外の場合は、$HOME/.clojure を使用します

設定ディレクトリが存在しない場合は、作成され、以下のファイルがコピーされます

  • deps.edn - デフォルトのユーザー deps.edn (基本的に空)

  • tools/tools.edn - ツールを管理するための組み込みツール "tools"

キャッシュディレクトリ

CLI のすべての実行では、計算されたクラスパスと他のファイルを格納するためにキャッシュディレクトリが使用されます。

キャッシュディレクトリは次のように計算されます

  • 現在のディレクトリにプロジェクト deps.edn があり、現在のディレクトリが書き込み可能である場合、./.cpcache を使用します

  • それ以外の場合は、設定ディレクトリ の .cpcache ディレクトリを使用します

キャッシュディレクトリ内のファイルは、既に計算されているクラスパスを使用する場合の起動時間を改善するためのキャッシュです。一般に、このキャッシュは失効することはありませんが、-Sforce を使用して特定のコマンドで再計算を強制するか、不明な場合はキャッシュディレクトリを rm することができます。

CLI の新しいバージョンをインストールすると、キャッシュが無効になる場合があります(キャッシュキーの形式が変更された場合)。これにより、以前に実行したコマンドがクラスパスを再計算するようになります。

Clojure CLI はキャッシュディレクトリ内のファイルを削除することはないため、これらのディレクトリを定期的にクリーンアップするかどうかはユーザー次第です。プロジェクトの .gitignore ファイルに .cpcache/ を含めることをお勧めします。そこには他のプロジェクトユーザーと共有するのに役立つものはありません。

環境変数

以下の環境変数は CLI の実行に影響を与える可能性があります(多くはこのページの他の場所で詳しく説明されています)

  • CLJ_CONFIG - ユーザー設定ディレクトリ。ユーザー deps.edn、ツール設定、およびプロジェクト deps.edn がないコマンドの cpcache を格納するために使用されます(デフォルト = ~/.clojure

  • XDG_CONFIG_HOME - この標準変数が設定されている場合、$XDG_CONFIG_HOME/clojure をユーザー設定ディレクトリとして使用します

  • CLJ_CACHE - ユーザーキャッシュディレクトリ(デフォルト = <config-dir>/.cpcache

  • XDG_CACHE_HOME - この標準変数が設定されている場合、$XDG_CACHE_HOME/clojure をユーザーキャッシュディレクトリとして使用します

  • CLJ_JVM_OPTS - クラスパス構築プロセスへの内部呼び出しに含まれる JVM オプション。内部アーティファクトのダウンロードに使用する自己署名証明書付きのトラストストアなどを提供するのに役立ちます

  • JAVA_CMD - 使用する Java 実行可能ファイルへのパス

  • JAVA_HOME - $JAVA_CMD とパス上に java がない場合、$JAVA_HOME/bin/java を使用しようとします

  • JAVA_OPTS - 実行されるユーザーコマンドに含まれる JVM オプション - キャッシュされません。-J コマンドラインパラメータと :jvm-opts の前に含まれます

  • AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY、およびその他の AWS 環境変数は、S3 ベースの Maven リポジトリにアクセスするときに使用されます

  • GITLIBS - gitlibs ストレージディレクトリへのパス(デフォルト = ~/.gitlibs

  • GITLIBS_COMMAND - 実行する git コマンド(デフォルト = git

  • GITLIBS_DEBUG - 実行されているすべての git コマンドを出力するために true に設定します

  • CLOJURE_CLI_ALLOW_HTTP_REPO - http:// リポジトリ URL を許可するために true に設定します(これにより、依存関係のダウンロードが中間者攻撃の影響を受ける可能性があります)

キーとキークラスパス

-X または -T 実行オプションを使用すると、コマンドラインでキークラスパス/値のペアを指定できます。キークラスパスは、単一のキー、またはネストされたキーを参照するキーのベクトルです(assoc-in と同様)。各キークラスパスは、元の :exec-args マップに assoc-in するために使用され、そこの値をオーバーライドします。

# Top key override
clj -X:my-fn :val 789

# Nested key override
clj -X:my-fn '[:my :data]' 789

コマンドラインでキークラスパス/値のペアとキークラスパスを渡すことに加えて、値マッピングを提供するオプションのマップを最後の引数として渡すことができます。このマップは、以前に提供されたキークラスパス/値のマッピングとマージされ、おそらくオーバーライドします

# Augment the arguments to my-fn
clj -X:a-tool my-fn :val 789 '{:val2 123}'

# Override the arguments to my-fn
clj -X:a-tool my-fn :val 789 '{:val 123}'

# Single map (no kvs) provides arguments to my-fn
clj -X:a-tool my-fn '{:val 789}'

キーと値の引用符

コマンドラインのキーと値は edn として読み取られます。以下のデータは引用符なしで使用できます

  • 数値 - 123, 12.4

  • ブール値 - true, false

  • Nil - nil

  • シンボル - name, foo/bar

  • キーワード - :id, :company/name

これらのデータ型は単一引用符で囲む必要があります

  • 文字列 - '"hi there"' - シェルには単一引用符、edn 文字列として読み取るには二重引用符の両方を使用することに注意してください

  • ベクトル - '[1 2 3]'

  • マップ - '{:a 1, :b 2}'

  • セット - '#{:a :b}'

  • リスト - '(1 2 3)'

Windows では、WSL2 シェルは上記のアドバイスに従うことができますが、cmd.exe または Powershell では、文字列値に追加のエスケープ引用符が必要です。残念ながら、コマンドライン Windows プログラム引数を変換するための引用符ルールと Powershell の引用符と単語分割の組み合わせは非常に複雑です。

トップレベルで文字列値を渡す場合、文字列値にスペースがない場合は、'\"str\"' を使用できます。文字列値にスペースがある(または無い)場合は、'"""str value"""' を使用する必要があります。

PS D:> clj -X clojure.core/prn :string1 '\"no-spaces\"' :string2 '"""has spaces"""'
{:string1 "no-spaces", :string2 "has spaces"}

他のコレクション内にネストされた文字列値の場合、スペースがある場合は二重引用符を使用し、スペースがない場合は三重引用符を使用します

PS D:> clj -X clojure.core/prn :val '{:s1 """nospaces""" :s2 ""has spaces""}'
{:val {:s1 "nospaces", :s2 "has spaces"}}

プログラム

Clojure CLI は、独自の独立したクラスパスを持つ他のライブラリ内のプログラム(関数)へのアクセスを提供するように設計されています。この機能は、ルート deps.edn の組み込み :deps エイリアスを介して拡張機能を提供するために活用されています。これは、tools.deps.cli を提供します(API を参照)。

依存関係リスト

---
clj -X:deps list
---

クラスパス用に選択されたすべての推移的な依存関係のソート済みリストと、ライセンス情報(見つかった場合)を出力します。追加のオプションを使用して、エイリアスまたは他のクラスパスの変更を選択したり、出力情報を変更したりできます。

APIドキュメントを参照してください (API docs)。

依存関係ツリー

---
clj -X:deps tree
---

依存関係の展開中に決定された、包含/除外情報を含む依存関係ツリーを出力します (依存関係の展開)。追加オプションを使用して、エイリアスまたは他のクラスパス変更を選択したり、出力情報を変更したりできます。

たとえば、以下は`:test`エイリアスの依存関係ツリーを出力するために使用できます

---
clj -X:deps tree :aliases '[:test]`
---

APIドキュメントを参照してください (API docs)。

エイリアス一覧

---
clj -X:deps aliases
---

このプログラムは、現在の依存関係環境に基づいて、コマンドラインで使用可能なすべてのエイリアスを出力します。追加オプションを使用して、エイリアスまたは他のクラスパス変更を選択できます。

APIドキュメントを参照してください (API docs)。

ヘルプ関数

`help/doc`関数と`help/dir`関数は、ツールの使用方法をイントロスペクトします。 `:deps`エイリアスにはプロジェクトクラスパスが含まれていないため、これらは現在、独自のプロジェクトで関数を実行する場合には役に立ちません。

  • `-X:deps help/doc` - キー`:ns`で指定された関数のdocstringとパラメータリスト、または追加キー`:fn`で指定された関数を表示します。どちらも指定されていない場合は、`:ns-default`が使用されます

  • `-X:deps help/dir` - キー`:ns`で指定された名前空間、または指定されていない場合は`:ns-default`のパブリック関数を表示します

組み込みの`tools`ツールの`:ns-default`にある関数セットを一覧表示する例

clojure -A:deps -Ttools help/dir

エイリアスにある関数セットを一覧表示する例

clojure -X:deps:my-alias help/dir

ヘルプ名前空間自体のdocstringを表示します(`help`は`:deps`の`:ns-aliases`マップで定義されていることに注意してください)

clojure -X:deps help/doc :ns help
  • こちらもご覧ください: API docs

ライブラリの準備

Clojureソースを含むソースライブラリは、それを使用するプロジェクトのクラスパスにすぐに追加できます。ただし、一部のソースライブラリは、Javaのコンパイルが必要であったり、リソースファイルのコピー/置換が必要であったりするなど、追加する前に準備が必要です。Clojure CLIは、準備が必要なプロジェクトを検出し、準備手順が完了していない限り、プログラムがソースから実行されないようにします。

ライブラリを準備する必要がある場合は、`deps.edn`に`:deps/prep-lib`キーを追加します

{:paths ["src" "target/classes"]
 :deps/prep-lib
 {:ensure "target/classes"
  :alias :build
  :fn compile-java}}

`:deps/prep-lib`以下のキーは次のとおりです

  • `:ensure` - ディレクトリの存在によって、準備が必要かどうかが決まります(存在する場合、準備は完了しています)

  • `:alias` - 準備中に`-T`で呼び出すエイリアス

  • `:fn` - 準備中に`-T`で呼び出す関数

したがって、deps.ednには、指定された関数を呼び出すことができるエイリアスも必要です。呼び出し可能な関数を含むビルドスクリプトを定義する方法については、tools.buildガイドを参照してください。

このgitライブラリを依存関係として追加してプログラムを実行しようとすると、Clojure CLIはそれをダウンロードし、準備が必要であること、および準備ができていないこと( "target/classes"パスが存在しないこと)を検出し、終了します。

依存関係ツリー内のライブラリを見つけて「準備」するには、組み込みの`:deps`エイリアスで提供されている`prep`ツールを使用できます

clj -X:deps prep

準備タスクは、依存関係の展開ですべてのライブラリを見つけ、ソースライブラリであり、準備が必要であり(`:deps/prep-lib`キーに基づく)、まだ準備されていない(`:deps/prep-lib`マップの`:ensure`ディレクトリに基づく)ライブラリを探します。これらのライブラリは、エイリアスと関数によって指定されたコマンドを、`clj -T:<alias> <fn>`のように実行します。

ライブラリが準備されると、このgitライブラリバージョンの他のユーザーが再び準備する必要はありません。

Clojureコードをコンパイルする準備手順を使用する必要がありますか?一般的には、いいえ。マシン上のこのgitライブラリのすべてのユーザーは、準備手順によって作成された準備済みクラスパスを共有します。Clojureコンパイラと依存ライブラリの選択は、このライブラリを使用する各アプリケーションに任せる方が適切です。開発時のコンパイルの使用の詳細については、開発時の起動時間ガイドを参照してください。

バージョンの検索

Mavenまたはgitライブラリの利用可能なバージョンを検索するには、組み込みの`:deps`エイリアスで提供されている`find-versions`ツールを使用します

clj -X:deps find-versions ...

提供できるパラメータは次のとおりです

  • `:lib` - gitまたはMavenライブラリ名。 git URLは、gitライブラリ名から自動的に構築されます。たとえば、`:git/lib`が`io.github.clojure/tools.deps.graph`の場合、git URL ` https://github.com/clojure/tools.deps.graph.git `が構築されます。 Mavenの場合は、`org.clojure/tools.deps.graph`のようにMavenライブラリ名を使用します。

  • `:tool` - ツールがすでにインストールされている場合のツール名

`find-versions`は、gitまたはMavenの座標を1行ずつコンソールに出力します。

ローカルMavenインストール

`-X:deps mvn-install`プログラムは、便宜上Clojure CLIで提供されており、 `-X`で実行してjarをローカルMavenキャッシュにインストールできます。

インストールパラメータには、次のオプションが含まれています

Required:
:jar - path to jar file, use pom inside jar by default

To supply an explicit pom file:
:pom - path to pom file (used instead of pom inside the jar)

To generate a minimal pom file:
:lib - qualified symbol like my.org/lib
:version - string
:classifier - string

Other options:
:local-repo - path to local repo (default = ~/.m2/repository)

必要に応じて、コマンドラインでこれらのオーバーライドを渡すことができます

clj -X:deps mvn-install :jar '"/path/to.jar"'

上記のように、edn文字列は二重引用符で囲み、シェル用に一重引用符で囲む必要があります。

pomファイルは、明示的に提供するか、:lib/:versionから生成するか、.jarファイル内(デフォルト)で見つける必要があります。

Maven pomの生成

次のプログラムを使用して、プロジェクトの依存関係とパスを使用して既存のpom.xmlを生成または更新します

  • `-X:deps mvn-pom` - 依存関係とパスを使用してpom.xmlを生成(または既存のものを更新)します

詳細については、APIドキュメントを参照してください。

ツール

ツールは、ライブラリで配信される関数の集合です。ツール関数は、プロジェクトクラスパスとは独立した独自のクラスパスを持つ個別のプロセスで実行されます。ツール関数は単一のマップ引数を取り、-Tで呼び出されます(-Xスタイルの実行と同じキー値引数構文)。

ツールは、エイリアス(プロジェクトを使用する他のユーザーと共有できる)またはマシンにインストールされているローカルツール名(プロジェクト間で共有できる)のいずれかによって記述されます。

ツールインストール

ツールを管理するためのツールは、Clojure CLIによって「tools」という名前で自動的にインストールされます。いくつかの便利な関数が提供されています

  • `install` - ツールをインストールまたは再インストールします

  • `install-latest` - 最新バージョンのツールをインストールまたは再インストールします

  • `list` - インストールされているすべてのツールを一覧表示します

  • `remove` - インストールされているツールを削除します

  • `show` - ツールの情報と使用方法を表示します

インストール

インストールするツールのバージョンを決定したら、`install`関数を使用してツールを名前でインストールします。

clj -Ttools install ...

`install-tool`の引数は次のとおりです

  • lib - 値はdeps.ednに従ってcoordマップです

  • `:as` - ツール名。以降の呼び出しに使用されます

例えば

clj -Ttools install io.github.clojure/tools.deps.graph '{:git/tag "v1.0.63"}' :as deps-graph

Windowsでは、PowerShellで追加のエスケープ引用符が必要です

clj -Ttools install io.github.clojure/tools.deps.graph '{:git/tag """v1.0.63"""}' :as deps-graph

gitの依存関係は、ツールのインストール時に、gitライブラリ名(慣例によりgit URLを形成するために使用される)とgitタグのみで完全に記述できることに注意してください。あるいは、coordには、代わりに明示的な`:git/url`または`:git/sha`が含まれている場合があります。

最新版のインストール

最新バージョンのツールを1ステップで見つけてインストールするには

clj -Ttools install-latest :lib io.github.clojure/tools.deps.graph :as deps-graph

既存のツールを最新バージョンに更新するには、ツール名を指定するだけでもかまいません

clj -Ttools install-latest :tool deps-graph

一覧

インストールされているすべてのツールを一覧表示するには

clj -Ttools list

インストールされているツールを削除するには

clj -Ttools remove :tool name

ツール作成者のためのベストプラクティス

ベストプラクティス

  • ツールをパブリックgitライブラリとして提供する

  • ツールAPIを、マップを引数とする関数として1つ以上のClojure名前空間で定義する

  • deps.ednのルートに`:tools/usage`キーを作成し、API名前空間の`:ns-default`キーまたは`:ns-aliases`キーのいずれか、または両方を指定する

  • gitリポジトリにタグを付けてリリースを作成します。シーケンスがユーザーにとって明らかなスキームを使用します。一般的な規則は、「v1.2.3」のようなバージョン文字列を使用することです。

ツールはユーザーにこれらの指示を提供できます

  • ツールバージョンを検索:`clj -X:deps find-versions :lib io.github.USER/TOOL`

  • `clj -Ttools install io.github.USER/TOOL '{:git/tag "VERSION"}' :as NAME`でツールをインストールする

  • `clj -TNAME f args…​`でツールを呼び出す

関数実行プロトコル

一部のツールは、次の制約と期待事項に基づいて、別のプロセスからプログラムで実行するために設計された関数を備えています

  • 関数は単一のマップ引数を取る必要があります

  • 結果は関数から返されます(通常どおり)

  • 関数によってスローされた例外は、障害を引き起こし、例外データ(`Throwable→map`風)は外部プロセスに伝えられ、外部プロセスはそれを`ex-info`で再スローします

  • 出力の印刷は(デフォルトでは)キャプチャされません

  • 結果または例外データは、別のプロセスで印刷してデータに読み戻しても安全でなければなりません

-Xまたは-T中にClojure CLIにとって特別な意味を持つ引数マップキーがいくつかあります。これらのキーはすべて、関数が呼び出される前に引数マップから削除されます

  • `:clojure.exec/invoke` - このプロトコルを使用するには`true`

  • `:clojure.exec/out` - 関数の実行中にstdoutをキャプチャして返すには`true`

  • `:clojure.exec/err` - 関数の実行中にstderrをキャプチャして返すには`true`

結果は、次のキーを持つ出力済みエンベロープマップにラップされ、CLI stdoutを介して返されます

  • `:tag` - 関数が結果を返したか、例外をスローしたかに基づいて、`:ret`または`:err`のいずれか

  • `:val` - 戻り値または例外データ。文字列にprnします

  • `:out` - 要求された場合、キャプチャされたstdoutが返されます

  • `:err` - 要求された場合、キャプチャされたstderrが返されます

  • `:ms` - 関数の実行時間(ミリ秒)

このプロトコルのコンシューマーAPIは、Clojure 1.12.0-alpha2以降で提供されています。

調達者

依存関係の座標は、特定の座標タイプを理解し、ライブラリの依存関係を見つけてアーティファクトをダウンロードする方法を知っている調達者によって解釈されます。Clojure CLIは現在、以下の調達者をサポートしています:MavenGit、およびローカル(ディレクトリとjarの両方を含む)。基盤となるtools.depsライブラリは、ライブラリとして使用される場合、調達者の拡張機能をサポートします。

座標属性は、どの調達者が使用されるかを決定します。一般的に、ほとんどの調達者属性は調達者タイプごとに修飾されます(いくつかの例外があります)。調達者に依存しない座標属性は、deps修飾子を使用します。

一部の調達者は、deps.edn設定マップのルートで、同じ修飾子を使用して設定属性を探す場合があります。

Maven

Maven調達者は、修飾子mvnを使用し、Javaエコシステムの標準リポジトリマネージャーであるMavenリポジトリからライブラリアーティファクトを取得するために使用されます。ライブラリは.jarファイルとしてダウンロードされ、Mavenローカルリポジトリキャッシュ(デフォルトでは~/.m2/repositoryにあります)に保存されます。他のJVMベースのツールもこのキャッシュを使用する場合があります。

Maven座標タイプMaven調達者設定の詳細は、deps.ednリファレンスを参照してください。

認証済みMavenリポジトリ

認証済みリポジトリのMaven依存関係の場合、既存のMavenインフラストラクチャを使用して資格情報を伝達します。

~/.m2/settings.xmlに以下を記述します。

<settings>
  ...
  <servers>
    <server>
      <id>my-auth-repo</id>
      <username>zango</username>
      <password>123</password>
    </server>
    ...
  </servers>
  ...
</settings>

次に、deps.ednに、サーバーID(ここではmy-auth-repo)と一致する名前のリポジトリを含めます。

{:deps
 {authenticated/dep {:mvn/version "1.2.3"}}
 :mvn/repos
 {"my-auth-repo" {:url "https://my.auth.com/repo"}}}

その後、:depsで通常どおり依存関係を参照するだけです。

Maven S3リポジトリ

mvn調達者は、AWS S3でホストされているパブリックおよびプライベートMavenリポジトリへの接続もサポートしています。これは、AWSでホストされているアプリケーション内からプライベートMavenリポジトリにアクセスする場合に特に便利です。

s3リポジトリルートを含む:mvn/reposを追加します。

{:deps
 {my/library {:mvn/version "0.1.2"}}
 :mvn/repos
 {"my-private-repo" {:url "s3://my-bucket/maven/releases"}}}

S3バケットは、作成されたAWSリージョンに固有です。 s3トランスポーターは、バケットの場所を特定しようとします。それがうまくいかない場合は、URLにバケットリージョンを明示的に指定できます:"s3://my-bucket/maven/releases?region=us-west-2"

認証済みリポジトリの場合、AWS資格情報は、サーバーごとに~/.m2/settings.xmlに設定するか、AWS資格情報チェーン(環境変数など)から環境に合わせてロードされます。 deps.ednのリポジトリ名は、settings.xmlのサーバーIDと一致する必要があります。

<settings>
  ...
  <servers>
    <server>
      <id>my-private-repo</id>
      <username>AWS_ACCESS_KEY_HERE</username>
      <password>AWS_SECRET_ACCESS_KEY_HERE</password>
    </server>
    ...
  </servers>
  ...
</settings>

AWS S3資格情報は、次のいずれかのメカニズムを使用して環境に設定できます。

  1. 環境変数AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYを設定します。

  2. AWS資格情報ファイル~/.aws/credentials(以前の~/.aws/configもサポートされています)にデフォルトプロファイルを作成します。

  3. AWS資格情報ファイルに名前付きプロファイルを作成し、環境変数AWS_PROFILEにその名前を設定します。

  4. Amazon ECSコンテナとインスタンスプロファイルの資格情報も機能するはずですが、テストされていません。

詳細については、このAWSドキュメントのアドバイスのほとんどは、資格情報の場所を説明しています。ただし、JavaシステムプロパティオプションはClojure CLIでは機能しません(tools.depsライブラリを直接使用している場合は機能します)。

Mavenプロキシ

インターネットがプロキシ経由でアクセスされる環境では、~/.m2/settings.xmlの既存のMaven設定を使用してプロキシ接続を設定します。

<settings>
  ...
  <proxies>
    <proxy>
      <id>my-proxy</id>
      <host>proxy.my.org</host>
      <port>3128</port>
      <nonProxyHosts>localhost|*.my.org</nonProxyHosts>
    </proxy>
  </proxies>
  ...
</settings>

詳細は、Mavenのプロキシの使用ガイドを参照してください。

Maven HTTPヘッダー

送信HTTPリクエストにカスタムヘッダーを追加するには、~/.m2/settings.xmlの既存のMaven設定が使用されます。

<settings>
  ...
  <servers>
    <server>
      <id>my-token-repo</id>
      <configuration>
        <httpHeaders>
          <property>
            <name>Private-Token</name>
            <value>abc123</value>
          </property>
        </httpHeaders>
      </configuration>
    </server>
    ...
  </servers>
  ...
</settings>

settings.xmlのサーバーIDは、deps.ednのリポジトリ名と一致する必要があります。

{:mvn/repos
 {"my-token-repo" {:url "https://my.auth.com/repo"}}}

このメカニズムは、ユーザー名とパスワードではなく、トークンを使用して認証するリポジトリによって使用されます。

Git

git調達者は、Gitリポジトリでホストされているソースベースのライブラリの直接使用をサポートしています。 Gitライブラリは、デフォルトで~/.gitlibsディレクトリにダウンロードされます。作業ツリーはチェックアウトされ、依存関係として含まれる各SHAに対してキャッシュされます。

Git座標タイプの詳細は、deps.ednリファレンスを参照してください。

設定とデバッグ

git調達者は、コマンドラインgit(およびssh)をシェルアウトします。 git>= 2.5が必要です。一般に、コマンドラインでアクセスが機能する場合は、Clojure CLIからも機能するはずです。 Gitがインストールされていること、そしてデフォルトでgitがパス上にあることが想定されています。 sshアクセスについては、システムのドキュメントを参照してください(通常は、sshキーを~/.ssh/id_rsaに登録します)。

gitの使用を制御するために、次の環境変数を設定できます。

  • GITLIBS - gitlibs ストレージディレクトリへのパス(デフォルト = ~/.gitlibs

  • GITLIBS_COMMAND - gitアクセスを実行するためのコマンド(デフォルト= git

  • GITLIBS_DEBUG - 実行されているgitコマンドとその出力のログを表示するには、trueに設定します(デフォルト= false

ローカル

local調達者は、ローカルディレクトリまたはjarファイルを依存関係として含めます。 ローカル座標タイプの詳細は、deps.ednリファレンスを参照してください。

用語集

ライブラリ

単一のディレクトリルートで管理される、何らかの問題を解決するClojureまたはその他のコードのコレクション。一般的な(ただし排他的ではない)使用方法では、ほとんどのGitHubリポジトリは単一のライブラリを保持します。各ライブラリには、明確な名前空間名があります。Mavenでは、これはgroup-id / artifact-idによって決定されます。

アーティファクト

コンテナファイルでリリースされたライブラリ。特定の時点でのライブラリの状態をキャプチャし、場合によってはビルドプロセスを受け、バージョンでラベル付けされ、依存関係を文書化するマニフェストが含まれ、jarなどにパッケージ化されています。

座標

使用するために選択されたライブラリの特定のバージョン。ライブラリの取得と使用に十分な情報が含まれています。

依存関係

宣言ライブラリがその一部の機能を提供するために、宣言ライブラリを必要とすることを、プロジェクト/ライブラリレベルで表したものです。少なくともライブラリ名を指定する必要があり、バージョンやその他の属性も指定する場合があります。実際の(機能的な)依存関係は、よりきめ細かいものです。

依存関係タイプ

  • Mavenアーティファクト(アーティファクトベース)

  • Gitライブラリ(ソースベース)

  • ローカルライブラリ(ソースベース)-ローカルディレクトリ

  • ローカルアーティファクト(アーティファクトベース)-ローカルjarファイル

クラスパス(およびルート/パス)

実行時にrequires / importsの検索のルートパスを形成する、ローカルの「場所」(ファイルシステムディレクトリまたはjar)の順序付きリスト。Javaに引数として提供され、セマンティクスを制御します。クラスパスでの順序依存性は推奨されません。これは、名前空間またはリソースファイルが重複している(したがって、おそらく壊れている)ことを意味します。

展開

ルート依存関係のセットが与えられた場合、推移的な依存関係セットの完全なクロージャ。

解決

ルート依存関係のコレクションと追加の変更が与えられた場合、完全に展開された依存関係ツリーを作成し、次に、言及された各ライブラリから、すべての依存関係を満たすために使用される単一のバージョンへのマッピング、およびそのソースまたはアーティファクトへのローカルパスを作成します。また、各エントリの依存関係も含まれます。競合が発生するのは、ライブラリがライブラリの異なるメジャーバージョンに依存している場合のみです。

バージョン

解釈が慣例によって決定される人間の番号付けシステム。多くの場合、x.y.zです。一般的なスキームの1つは、「セマンティックバージョニング」、別名「semver」です。これは、各レベルでの変更に意味を割り当てます。たとえば、最初のメジャー番号の変更は、破壊的な変更を示します。

バージョンの違い

これは、依存関係の展開に、指定された「バージョン」が複数あるが、相対的な順序(番号またはSHAなどによる)がある同じライブラリが含まれている場合に発生します。バージョンの違いは、その関係を確立できる場合に「後」または「最新」のバージョンを選択することで解決できます。

バージョン競合

バージョン競合は、依存関係の展開に、最適な選択肢を自動的に選択できないような複数の「バージョン」を持つ同じライブラリが含まれている場合に発生します。

  • semverバージョンの破損(メジャーバージョンの変更)

  • 共通のルートまたは祖先を含まないgithub SHA(たとえば、異なるブランチまたは無関係なリポジトリの2つのSHA)

  • 相対的な関係を確立できないほど異なるリポジトリまたはリポジトリタイプをまたがるバージョン

Mavenリポジトリ

ライブラリアーティファクトのリポジトリ-たとえば、Maven CentralまたはClojars