deps.edn 레퍼런스

deps.edn 레퍼런스

deps.edn 파일은 프로젝트의 클래스패스(classpath)를 구성하는 데 필요한 모든 정보를 담는 데이터 파일이에요. 의존성(deps)과 경로(paths), 외부 의존성 저장소 정보까지 모두 이 한 파일에 들어 있죠. 이 파일 형식은 tools.deps 라이브러리Clojure CLI가 함께 사용해요.

만약 deps.edn을 활용하는 도구를 만든다면, deps.edn 데이터의 다른 곳에 임의의 태그를 덧붙이기보다 잘 알려진 네임스페이스화된 :aliases 를 만들어 도구 설정을 전달하는 게 좋아요. 임의의 태그는 처리 과정에서 보존되거나 전달되지 않을 수 있거든요. 도구는 실행 시점에 runtime basis를 통해, 또는 프로그램적으로 tools.deps를 통해 별칭(alias) 데이터에 접근할 수 있어요.

출처: Clojure 공식문서

본문

deps.edn 속성 한눈에 보기

deps.edn에 쓸 수 있는 속성들을 한눈에 정리하면 이렇게 생겼어요.

{;; 프로젝트 경로
 :paths ["relative/path1" :path-alias]

 ;; 프로젝트 의존성
 :deps {
   ;; Maven 라이브러리
   groupId/artifactId$classifier {:mvn/version "1.2.3"
                                  :exclusions [lib1 lib2]}

   ;; Git 라이브러리
   gitlib/name {:git/url "https://example.com/repo"
                :git/tag "dev"
                :git/sha "123abcd"
                :deps/root "sub/dir"
                :deps/manifest :pom
                :exclusions [lib1 lib2]}

   ;; 로컬 디렉터리
   localdir/name {:local/root "path/to/dir"
                  :deps/manifest :pom
                  :exclusions [lib1 lib2]}

   ;; 로컬 jar
   localjar/name {:local/root "path/to.jar"
                  :exclusions [lib1 lib2]}}

 ;; 별칭(alias)은 어떤 edn 데이터 묶음에도 이름을 붙여줘요
 :aliases {
   :alias-name {
     :extra-deps {lib coord}
     :override-deps {lib coord}
     :default-deps {lib coord}
     :deps {lib coord}
     :replace-deps {lib coord}

     :extra-paths ["p1" "p2"]
     :paths ["p1" "p2"]
     :replace-paths ["p1" "p2"]
     :classpath-overrides {lib "path"}

     :ns-default namespace
     :ns-aliases {alias namespace}

     :exec-fn afn/symbol
     :exec-args {key val}

     :jvm-opts ["opt1" "opt2"]
     :main-opts ["opt1" "opt2"]}}

 ;; 확보(procurer) 설정
 :mvn/local-repo "path/to/local-repo"
 :mvn/repos {"repo" {:url "https://..."
                     :releases {:enabled true
                                :update :daily
                                :checksum :warn}
                     :snapshots {#_releases와 동일}}}

 ;; 도구 배포(tool publishing)
 :tools/usage {:ns-default namespace
               :ns-aliases {alias namespace}}

 ;; 사용 전 준비(컴파일)가 필요한 라이브러리
 :deps/prep-lib {:ensure "target/classes"
                 :alias :build
                 :fn compile}}

이제 각 속성을 하나씩 살펴볼게요.

:paths — 클래스패스에 넣을 경로

:paths는 프로젝트에서 클래스패스에 올려야 할 디렉터리를 지정해요. 소스와 리소스 둘 다 포함돼요.

최상위 키 :paths문자열 경로 또는 별칭 이름의 모음으로 선언해요. 별칭 이름은 어떤 별칭 안에 정의된 경로들의 묶음을 가리키는데, 이렇게 하면 재사용할 수 있어요.

경로는 프로젝트 루트 기준의 하위 디렉터리여야 해요. 예를 들어 "src""resources"처럼요. 절대 경로도 지원되지만 예외적인 경우에만 쓰는 게 좋아요. 프로젝트 루트 바깥의 경로는 경고 메시지를 띄우는데, 이는 더 이상 사용을 권장하지 않으며(deprecated) 미래에 제거될 수 있어요.

별칭 이름을 쓰는 경우, 그 별칭 데이터의 경로 벡터를 가리켜야 해요.

{:paths [:clj-paths :resource-paths]
 :aliases
 {:clj-paths ["src/clj" "src/cljc"]
  :resource-paths ["resources"]}}

경로는 항상 클래스패스의 맨 앞에 포함돼요. 확장된 :paths 컬렉션에 적힌 순서 그대로예요.

:deps — 의존성

의존성은 deps.edn의 최상위 키 :deps라이브러리에서 좌표(coordinate)로 가는 맵으로 선언해요.

라이브러리 이름은 정규화된(qualified) 심볼이에요. 정규화되지 않은 심볼은 name/name으로 취급되지만, 이 사용법은 더 이상 권장되지 않아요. 좌표(그리고 라이브러리 이름도 어느 정도)는 아래에 설명하는 좌표 유형별로 달라져요.

의존성은 이 최상위 deps 집합에서 모든 전이적(transitive) 의존성을 포함하도록 확장(expanded)돼요. 일반적으로는 가장 새로운 버전이 선택돼요(다른 제약이 없다면 — 자세한 건 문서를 보세요). 의존성은 경로(paths) 뒤에 클래스패스에 올라가며, a) 루트로부터의 깊이, b) 특정 깊이에서의 의존성 알파벳 순서로 정렬돼요. 이 순서는 안정적이어야 해요.

{:deps
 {;; maven 의존성 예시
  org.clojure/tools.reader {:mvn/version "1.1.1"}

  ;; git 의존성 예시
  io.github.sally/awesome {:git/tag "v1.2.3" :git/sha "123abcd"}

  ;; 로컬 의존성 예시
  my.dev/project {:local/root "../project"}

  ;; 로컬 jar 예시
  my.driver/jar {:local/root "../libs/driver.jar"}
 }}

Maven 의존성

Maven 확보자(procurer)는 한정자(qualifier) mvn을 쓰며, Java 생태계의 표준 저장소 관리자인 Maven 저장소에서 라이브러리 아티팩트를 가져와요. 라이브러리는 .jar 파일로 다운로드되어 Maven 로컬 저장소 캐시(기본적으로 ~/.m2/repository, 또는 :mvn/local-repo로 변경)에 보관돼요. 다른 JVM 기반 도구도 이 캐시를 쓸 수 있어요.

Maven 라이브러리는 "Maven 좌표"로 저장소에서 찾는데, 보통 groupId, artifactId, version이에요(줄여서 GAV라고도 불러요). deps.edn에서는 라이브러리 이름을 groupId/artifactId로 파싱하고, 버전은 :mvn/version에서 가져와요. 일부 Maven 아티팩트는 "classifier"를 가지는데, 특정 아티팩트의 변형이에요. Maven 확보자에서 classifier는 라이브러리 이름 끝에 $로 구분해 넣어요. groupId/artifactId$classifier처럼요.

현재는 jar 아티팩트만 지원해요. 다른 아티팩트 유형(특히 Bill of Materials poms)에 대한 지원은 미래에 추가될 수 있어요.

참고로 의존성이나 전이적 의존성 안에 선언된 Maven <repositories>는 무시돼요. 전체 의존성 집합에 필요한 모든 저장소는 프로젝트 deps.edn에 :mvn/repos로 선언해야 해요.

:mvn/version

모든 Maven 의존성에 필요한 키로, 버전을 문자열로 지정해요.

  • "1.2.3"
  • "1.2.3-SNAPSHOT"

Git 의존성

git 확보자는 Git 저장소에 호스팅된 소스 기반 라이브러리를 직접 사용할 수 있게 해줘요. Git 라이브러리는 기본적으로 ~/.gitlibs 디렉터리에 다운로드돼요. 의존성으로 포함된 각 sha에 대해 워킹 트리가 체크아웃되고 캐시돼요.

Git 라이브러리를 의존성으로 지정하려면 두 가지 정보를 알아야 해요. Git 저장소 url특정 sha예요. 브랜치 이름 같은 이동 가능한 참조(movable reference)는 지원되지 않아요.

Git 좌표는 다음 속성을 가져요.

  • :git/url — 선택, Git url(라이브러리 이름에서 추론할 수 있어요. 아래 참고)
  • :git/sha — 필수, 전체 40자 sha 또는 태그와 함께 쓰는 sha 접두사(:sha도 하위 호환을 위해 허용돼요)
  • :git/tag — 선택, Git 태그 이름(:git/sha와 함께만 쓸 수 있어요. :tag도 하위 호환을 위해 허용돼요)

Git url은 제공하거나 라이브러리 이름에서 추론해야 해요. 제공하면 :git/url이 우선해요. 라이브러리 이름에서 url을 추론하는 규약은 이렇게 돼요.

라이브러리 형식 추론된 :git/url
io.github.ORG/PROJECT "https://github.com/ORG/PROJECT.git"
com.github.ORG/PROJECT "https://github.com/ORG/PROJECT.git"
io.gitlab.ORG/PROJECT "https://gitlab.com/ORG/PROJECT.git"
com.gitlab.ORG/PROJECT "https://gitlab.com/ORG/PROJECT.git"
io.bitbucket.ORG/PROJECT "https://bitbucket.org/ORG/PROJECT.git"
org.bitbucket.ORG/PROJECT "https://bitbucket.org/ORG/PROJECT.git"
io.beanstalkapp.ORG/PROJECT "https://ORG.git.beanstalkapp.com/PROJECT.git"
com.beanstalkapp.ORG/PROJECT "https://ORG.git.beanstalkapp.com/PROJECT.git"
ht.sr.ORG/PROJECT "https://git.sr.ht/~ORG/PROJECT"
org.codeberg.ORG/PROJECT "https://codeberg.org/ORG/PROJECT.git"
page.codeberg.ORG/PROJECT "https://codeberg.org/ORG/PROJECT.git"

다음은 유효한 git 의존성 두 개를 담은 deps.edn 예시예요. 첫 번째는 git url을 추론하고 태그와 sha 접두사를 쓰며, 두 번째는 명시적 git url과 전체 sha를 써요.

{:deps
 {;; 암묵적 git url, 태그 + sha 접두사
  io.github.clojure/tools.deps.graph {:git/tag "v1.1.68" :git/sha "6971bb4"}

  ;; 명시적 git url, 전체 sha
  org.clojure/tools.build {:git/url "https://github.com/clojure/tools.build.git"
                           :git/sha "ba1a2bf421838802e7bdefc541b41f57582e53b6"}}}

:git/url

:git/url은 위에서 설명한 형식을 쓰면 라이브러리 이름에서 추론되고, 그렇지 않으면 직접 제공해야 해요.

가장 흔한 git url 프로토콜은 https와 ssh예요. https 저장소는 익명으로 접근하며 추가 인증 정보가 필요 없어요. 이 방식은 여러분이 관리하지 않는 공개 저장소에 권장돼요. ssh 저장소는 공개든 비공개든 ssh 신원(identity)을 사용해요.

키 생성과 ssh-agent로 ssh 신원을 관리하는 방법에 대한 자세한 내용은 GitHub 문서가 잘 정리돼 있어요.

다른 프로토콜(local, file 포함)도 동작하지만 흔히 쓰이지는 않아요.

:git/tag

:git/tag는 선택적인 좌표 키로, 태그를 지정해 sha의 의미를 알려줘요. :git/tag가 제공되면 :git/sha는 전체 40자 sha 대신 짧은 sha일 수 있어요.

:git/sha

:git/sha는 필수 좌표 키예요. :git/tag가 제공되면 sha 접두사일 수 있고(같은 커밋을 가리켜야 해요), 그렇지 않으면 전체 40자 sha여야 해요.

sha A와 sha B 사이에서 버전을 고를 때, B가 A의 조상(ancestor)이면 B가 선택돼요("가장 후손"인 것). A와 B가 조상/후손 관계가 아니라면(예: 병렬 브랜치의 커밋), 이는 오류이며 클래스패스 구성이 실패해요.

로컬 의존성

로컬 의존성은 디스크의 디렉터리나 jar 파일을 가리켜요. :local/root 속성은 필수이며 절대 경로 또는 상대 경로일 수 있어요.

:local/root

로컬 프로젝트 디렉터리인 경우 :local/root는 디렉터리 경로여야 하고, 프로젝트 디렉터리 기준의 절대 경로 또는 상대 경로예요.

jar 파일인 경우 :local/root는 jar 파일로 가는 절대 또는 상대 경로예요. jar에 pom.xml이 포함되어 있으면 그걸로 전이적 의존성을 찾아요.

공용 의존성 속성

:exclusions

:exclusions 속성은 이 의존성에서 전이적 의존성으로 제외할 라이브러리 심볼들의 벡터를 받아요. 모든 의존성에 사용할 수 있어요.

:deps/root

:deps/root는 파일 기반 의존성 내에서 매니페스트 파일을 찾을 상대 디렉터리 경로를 가리켜요. 모노레포(monorepo) 스타일 프로젝트에서 저장소 루트 아래의 디렉터리에 있는 의존성 루트를 지정할 때 흔히 쓰여요.

:deps/manifest

git이나 로컬 프로젝트를 포함할 때, 프로젝트 유형은 매니페스트 파일인 deps.edn과 pom.xml을 보고 자동 감지돼요. 둘 다 있으면 deps.edn이 우선해요.

:deps/manifest 속성은 프로젝트 매니페스트 유형을 지정하고 자동 감지를 덮어써요. 유용한 값은 :deps, :pom이에요. (다른 값으로 :mvn, :jar도 있지만 따로 지정할 필요는 없어요.)

:aliases — 별칭

별칭(alias)은 데이터 구조에 이름을 붙여서, Clojure CLI 자체나 deps.edn의 다른 소비자가 그 이름으로 쓸 수 있게 해줘요. 설정 파일의 :aliases 섹션에 정의돼요.

:extra-deps

:extra-deps는 가장 흔한 수정 방식이에요. 기본 의존성 집합에 추가 의존성을 더할 수 있게 해줘요. 값은 라이브러리에서 좌표로 가는 맵이에요.

{:extra-deps {criterium/criterium {:mvn/version "0.4.4"}}}

:override-deps

:override-deps는 버전 해석(version resolution)이 고른 좌표 버전을 덮어써서 특정 버전을 강제해요. 값은 라이브러리에서 좌표로 가는 맵이에요.

{:override-deps {org.clojure/clojure {:mvn/version "1.9.0"}}}

:default-deps

:default-deps는 좌표가 지정되지 않았을 때 쓸 기본 좌표 버전 집합을 제공해요. 여러 공유 프로젝트에서 의존성 관리 시스템처럼 쓸 수 있어요.

{:default-deps {org.clojure/core.cache {:mvn/version "0.6.4"}}}

:deps / :replace-deps

:deps:replace-deps는 동의어로, 프로젝트의 :deps를 대체(REPLACE)하는 deps 맵을 정의해요. 값은 라이브러리에서 좌표로 가는 맵이에요.

:extra-paths

:extra-paths는 표준 소스 경로에 더해 소스 경로를 추가로 포함할 때 써요. 예를 들어 테스트 소스의 디렉터리를 포함하려는 경우죠.

{:extra-paths ["test" "resources"]}

참고로 외부 경로는 프로젝트 루트 디렉터리(deps.edn 파일이 있는 위치)에 있거나 그 아래여야 해요.

:paths / :replace-paths

:paths:replace-paths는 동의어로, 프로젝트의 :paths를 대체(REPLACE)하는 문자열 경로들의 집합을 정의해요.

:classpath-overrides

:classpath-overrides는 의존성 해석 중 찾은 경로를 덮어쓸 위치를 지정해서, 예를 들어 의존성을 로컬 디버그 버전으로 바꿔치기할 때 써요. 이런 사용 사례 중 상당수는 클래스패스 앞쪽에 뭔가를 붙여 "덮어쓰고" 싶은 경우예요.

{:classpath-overrides
 {org.clojure/clojure "/my/clojure/target"}}

:ns-default

:ns-default 속성은 네임스페이스 심볼로, 정규화되지 않은(unqualified) 심볼을 제공하는 속성의 기본 네임스페이스로 쓰여요. 가장 중요하게는 :exec-fn에서요.

:ns-aliases

:ns-aliases 속성은 별칭 심볼에서 네임스페이스 심볼로 가는 맵으로, 정규화된 심볼을 해석하는 데 쓰여요. 가장 중요하게는 :exec-fn에서요.

:exec-fn

:exec-fn 심볼은 Clojure CLI에서 -X 함수 실행을 쓸 때 호출할 기본 함수를 정의해요.

;; deps.edn
{:aliases
 {:my-fn
  {:exec-fn my.qualified/fn
   :exec-args {:my {:data 123}
               :config 456}}}}

:exec-fn 심볼은 다음 규칙으로 해석돼요.

  • 함수가 정규화되지 않았다면, 인자 맵의 :ns-default 키에 있는 네임스페이스를 사용해요(없으면 오류예요).
  • 함수가 정규화됐고, 그 한정자가 인자 맵의 :ns-aliases 아래의 별칭이라면, 그 네임스페이스를 사용해요.
  • 그 외에는 완전히 정규화된 함수 심볼을 사용해요.

:exec-args

:exec-args 맵은 Clojure CLI에서 -X-T:exec-fn 함수를 실행할 때 제공되는 키-값 쌍을 지정해요. 이 키-값 쌍은 사실상 먼저 제공되므로, 명령줄의 이후 키-값 쌍으로 덮어쓸 수 있어요.

:jvm-opts

:jvm-opts-M, -X, -T 또는 repl로 Clojure CLI를 실행할 때 제공할 JVM 옵션 문자열들의 집합이에요.

:main-opts

:main-opts는 Clojure CLI에서 -M으로 시작된 프로그램에 제공할 문자열 옵션들의 집합이에요. main 인자를 제공하는 별칭이 여러 개 병합되면 마지막 것의 인자만 사용돼요(누적하거나 합치지 않아요). 추가 main 옵션은 -M 뒤 명령줄에 더 제공할 수 있어요.

확보자(procurer) 설정

Maven

Maven 확보자는 Maven 해석기(resolver)와 Maven 저장소 시스템으로 아티팩트를 다운로드해요. 이 부분은 Maven 의존성 섹션에서 더 자세히 설명해요. 일부 옵션은 deps.edn에서 설정할 수 있어요.

:mvn/local-repo

기본적으로 Maven은 ~/.m2/repository 디렉터리를 다운로드한 pom과 jar의 로컬 캐시로 사용해요. :mvn/local-repo는 로컬 Maven 캐시로 쓸 다른 디렉터리의 문자열 경로예요.

:mvn/repos

Maven 확보자는 항상 두 개의 내장 저장소를 사용하며, 항상 이 순서로 먼저 확인해요.

{"central" {:url "https://repo1.maven.org/maven2/"}
 "clojars" {:url "https://repo.clojars.org/"}}

:mvn/repos 키에 저장소 이름에서 추가 저장소 속성의 맵으로 가는 맵으로 추가 저장소를 제공할 수 있어요. 저장소 이름은 자유롭게 정할 수 있어요. :url 속성은 필수이고 나머지는 선택이에요. 의존성 pom이나 deps.edn에 선언된 저장소는 사용되지 않아요. 필요한 모든 저장소는 사용 중인 최상위 deps.edn 파일에 정의해야 해요.

:url

:url은 저장소 루트로 가는 문자열 url이에요.

http:// url은 기본적으로 지원되지 않아요. 필요하다면 CLOJURE_CLI_ALLOW_HTTP_REPO 환경 변수에 대한 정보를 Clojure CLI 문서에서 확인해요.

:releases:snapshots

:releases 속성은 선택이지만, 릴리즈(스냅샷이 아닌 아티팩트)에 대한 기본 저장소 구성을 덮어쓰는 데 쓸 수 있어요.

{:mvn/repos
 {"my-releases" {:url "https://example.com/releases"
                 :snapshots {:enabled false}
                 :releases {:enabled true
                            :update :daily
                            :checksum :fail}}}}

:snapshots 속성은 :releases 속성과 같지만, 스냅샷 아티팩트에 대한 저장소 정책을 적용해요.

저장소 속성은 다음과 같아요.

  • :enabled — 불리언, 기본값=true. 저장소를 릴리즈나 스냅샷 중 하나에만 대상화하는 데 쓰기도 해요.
  • :update — 저장소의 업데이트를 얼마나 자주 확인할지 정하는 플래그로, 유효한 값은 :daily(기본값), :always, :never, 또는 분 단위 간격(정수)이에요.
  • :checksum — 체크섬 검증 플래그로, :warn(기본값), :fail, :ignore 중 하나예요.

Clojure CLI의 추가 설정은 Maven 확보자 설정을 함께 보세요.

Git

Clojure CLI의 추가 설정은 Git 확보자 설정을 함께 보세요.

Local

로컬 확보자에는 설정 옵션이 없어요.

도구 정의 (Tool definition)

Github나 로컬 디렉터리에서 불러온 Clojure CLI 도구는 :tools/usage 키를 사용해 deps.edn에 기본 도구 구성을 제공할 수 있어요. 도구의 모든 사용자는 도구 설치의 일부로 이 구성을 받게 돼요.

:tools/usage

deps.edn 기반 도구를 위한 exec 인자 맵으로, 다음 속성을 포함할 수 있어요.

  • :exec-args
  • :ns-default
  • :ns-aliases

라이브러리 준비 (Prep lib)

:deps/prep-lib

Clojure 소스를 가진 소스 라이브러리는 그것을 사용하는 프로젝트의 클래스패스에 바로 추가될 수 있어요. 하지만 일부 소스 라이브러리는 추가 전에 준비가 필요해요. 예를 들어 Java 컴파일이 필요하거나, 리소스 파일을 복사/교체해야 하는 경우죠. Clojure CLI는 이제 준비가 필요한 프로젝트를 감지하고, 준비 단계가 끝나지 않으면 소스로 프로그램을 실행하지 못하게 막아요.

라이브러리가 준비를 필요로 한다면 deps.edn:deps/prep-lib 키를 추가해요.

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

:ensure는 프로젝트 기준의 상대 디렉터리 경로로, 그 존재 여부로 준비가 필요한지 판단해요(있으면 준비가 끝난 것).

:alias

:alias는 준비 중 -T로 호출할 키워드 별칭이에요.

:fn

:fn은 준비 중 -T로 호출할 함수예요.

런타임 basis (Runtime basis)

런타임 basis는 Clojure 런타임이 시작될 때의 의존성 환경을 나타내는 표현이에요. 의존성, 클래스패스, basis가 어떻게 만들어졌는지에 대한 정보를 포함해요.

런타임 basis는 Clojure 안에서 clojure.java.basis API로 접근할 수 있어요. 초기 basis와 현재 basis에 모두 접근할 수 있으며, 현재 basis는 add-libs 및 관련 함수로 수정될 수 있어요.

basis 속성을 한눈에 보면 이렇게 돼요.

{;; basis는 병합된 deps.edn의 상위 집합이므로
 ;; 위의 모든 속성에 다음이 더해질 수 있어요

 ;; 프로젝트 경로
 :basis-config {:dir "project/dir"
                :root    :standard|path|map
                :user    :standard|path|map
                :project :standard|path|map
                :extra   path|map
                :aliases [:alias1 ...]
                :args    {arg val}}
 :argmap {arg val}
 :libs {lib coord}
 :classpath {classpath-path classpath-info}
 :classpath-roots [classpath-path ...]}

:basis-config

:basis-config 속성은 basis가 만들어질 때 사용된 매개변수를 담고 있어요. 나중에 basis를 재구성하기에 충분해야 해요. 이 성질은 특히 sync-deps가 사용해요.

:basis-config는 다음 속성을 가질 수 있어요.

  • :dir — 프로젝트 디렉터리(프로젝트 deps.edn을 담고 있는)의 절대 또는 상대 경로, 기본값은 현재 디렉터리
  • :root — 루트 deps.edn 소스, :standard(classpath에서 읽음), 경로, 리터럴 맵 중 하나
  • :user — 사용자 deps.edn 소스, :standard(사용자 설정 디렉터리에서 읽음), 경로, 리터럴 맵 중 하나
  • :project — 프로젝트 deps.edn 소스, :standard(:dir에서 읽음), 경로, 리터럴 맵 중 하나
  • :extra — 추가 deps.edn 소스, 경로 또는 리터럴 맵
  • :aliases — argmap 키를 제공하는 별칭 키워드들의 벡터
  • :args — 별칭 argmap이 병합된 뒤 적용되는 추가 argmap 인자의 맵

:argmap

basis의 :argmap은 의존성을 해석하고 클래스패스를 계산할 때 사용된 병합된 argmap을 담고 있어요. argmap은 :aliases로 간접적으로 제공되거나, basis를 만들 때 :args 키로 직접 제공될 수 있어요.

argmap 인자의 완전한 목록과 각각의 역할은 Clojure CLI 레퍼런스 페이지를 보세요.

:libs

basis의 :libs 키는 basis 클래스패스에 포함된 모든 의존성(직접, 전이적 모두)의 맵이에요. :libs 값은 라이브러리 이름(정규화된 심볼)에서 일부 추가 키를 가진 라이브러리 좌표로 가는 맵이에요. 대부분의 키는 규범적(non-normative)이지만, 중요한 추가 키 하나는 이 라이브러리에 대해 클래스패스에 추가할 파일 경로의 :paths 벡터예요.

:classpath

:classpath 키는 키가 클래스패스 경로(문자열)이고 값이 그 경로가 포함된 이유를 설명하는 맵이에요. 가장 흔하게는 :lib-name 키를 가진 맵(라이브러리용)이거나 :path-key 키를 가진 맵(소스 경로용)이에요.

:classpath-roots

:classpath-roots 키는 클래스패스를 정렬하는 벡터예요(경로 문자열은 :classpath 키의 키와 일치해야 해요). 정렬 규칙은 Clojure CLI의 클래스패스 구성 섹션을 보세요.

더 알아보기