Использование ключевого слова maven "LATEST" в проекте leiningen - PullRequest
2 голосов
/ 08 декабря 2011

У меня есть два проекта leiningen.Согласно этому вопросу , maven должен позволить мне использовать "LATEST" в качестве версии зависимости.Это дает мне ошибку, указывающую на то, что зависимость с версией "LATEST" не может быть найдена. Этот ответ показывает, как я локально ссылаюсь на этот проект с leiningen, если это имеет значение.

Как мне заставить это работать?Если это не то, как вы ссылаетесь на локальные зависимости в вашем проекте, я открыт для альтернативных предложений.

Файлы проекта выглядят так:

(defproject mongo-model "0.0.19-SNAPSHOT"
            :description "A simple way to create model templates for mongodb for write-time data validation"
            :dependencies [[org.clojure/clojure "1.3.0"]]
            :main mongo-model.core)

и

(defproject bayou "0.1.0-SNAPSHOT"
            :description "FIXME: write this!"
            :dependencies [[org.clojure/clojure "1.3.0"]
                           [mongo-model "LATEST"]]
            :main bayou.server)

Запуск lein deps во втором проекте дает мне эту ошибку:

An error has occurred while processing the Maven artifact tasks.
 Diagnosis:

Unable to resolve artifact: Missing:
----------
1) mongo-model:mongo-model:jar:LATEST

  Try downloading the file manually from the project website.

  Then, install it using the command: 
      mvn install:install-file -DgroupId=mongo-model -DartifactId=mongo-model -Dversion=LATEST -Dpackaging=jar -Dfile=/path/to/file

  Alternatively, if you host your own repository you can deploy the file there: 
      mvn deploy:deploy-file -DgroupId=mongo-model -DartifactId=mongo-model -Dversion=LATEST -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

  Path to dependency: 
    1) org.apache.maven:super-pom:jar:2.0
    2) mongo-model:mongo-model:jar:LATEST

----------
1 required artifact is missing.

for artifact: 
  org.apache.maven:super-pom:jar:2.0

from the specified remote repositories:
  clojars (http://clojars.org/repo/),
  central (http://repo1.maven.org/maven2)



Exception in thread "main" Unable to resolve artifact: Missing:
----------
1) mongo-model:mongo-model:jar:LATEST

  Try downloading the file manually from the project website.

  Then, install it using the command: 
      mvn install:install-file -DgroupId=mongo-model -DartifactId=mongo-model -Dversion=LATEST -Dpackaging=jar -Dfile=/path/to/file

  Alternatively, if you host your own repository you can deploy the file there: 
      mvn deploy:deploy-file -DgroupId=mongo-model -DartifactId=mongo-model -Dversion=LATEST -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

  Path to dependency: 
    1) org.apache.maven:super-pom:jar:2.0
    2) mongo-model:mongo-model:jar:LATEST

----------
1 required artifact is missing.

for artifact: 
  org.apache.maven:super-pom:jar:2.0

from the specified remote repositories:
  clojars (http://clojars.org/repo/),
  central (http://repo1.maven.org/maven2)

 (NO_SOURCE_FILE:0)
    at clojure.lang.Compiler.eval(Compiler.java:5440)
    at clojure.lang.Compiler.eval(Compiler.java:5391)
    at clojure.core$eval.invoke(core.clj:2382)
    at clojure.main$eval_opt.invoke(main.clj:235)
    at clojure.main$initialize.invoke(main.clj:254)
    at clojure.main$script_opt.invoke(main.clj:270)
    at clojure.main$main.doInvoke(main.clj:354)
    at clojure.lang.RestFn.invoke(RestFn.java:457)
    at clojure.lang.Var.invoke(Var.java:377)
    at clojure.lang.AFn.applyToHelper(AFn.java:172)
    at clojure.lang.Var.applyTo(Var.java:482)
    at clojure.main.main(main.java:37)
Caused by: Unable to resolve artifact: Missing:
----------
1) mongo-model:mongo-model:jar:LATEST

  Try downloading the file manually from the project website.

  Then, install it using the command: 
      mvn install:install-file -DgroupId=mongo-model -DartifactId=mongo-model -Dversion=LATEST -Dpackaging=jar -Dfile=/path/to/file

  Alternatively, if you host your own repository you can deploy the file there: 
      mvn deploy:deploy-file -DgroupId=mongo-model -DartifactId=mongo-model -Dversion=LATEST -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

  Path to dependency: 
    1) org.apache.maven:super-pom:jar:2.0
    2) mongo-model:mongo-model:jar:LATEST

----------
1 required artifact is missing.

for artifact: 
  org.apache.maven:super-pom:jar:2.0

from the specified remote repositories:
  clojars (http://clojars.org/repo/),
  central (http://repo1.maven.org/maven2)


    at org.apache.maven.artifact.ant.DependenciesTask.doExecute(DependenciesTask.java:175)
    at org.apache.maven.artifact.ant.AbstractArtifactTask.execute(AbstractArtifactTask.java:678)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:90)
    at clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:265)
    at leiningen.deps$do_deps.invoke(deps.clj:131)
    at leiningen.deps$deps.doInvoke(deps.clj:195)
    at clojure.lang.RestFn.invoke(RestFn.java:410)
    at clojure.lang.Var.invoke(Var.java:365)
    at clojure.lang.AFn.applyToHelper(AFn.java:161)
    at clojure.lang.Var.applyTo(Var.java:482)
    at clojure.core$apply.invoke(core.clj:542)
    at leiningen.core$apply_task.invoke(core.clj:228)
    at leiningen.core$_main.doInvoke(core.clj:294)
    at clojure.lang.RestFn.invoke(RestFn.java:410)
    at clojure.lang.AFn.applyToHelper(AFn.java:161)
    at clojure.lang.RestFn.applyTo(RestFn.java:132)
    at clojure.core$apply.invoke(core.clj:542)
    at leiningen.core$_main.invoke(core.clj:297)
    at user$eval42.invoke(NO_SOURCE_FILE:1)
    at clojure.lang.Compiler.eval(Compiler.java:5424)
    ... 11 more
Caused by: org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException: Missing:
----------
1) mongo-model:mongo-model:jar:LATEST

  Try downloading the file manually from the project website.

  Then, install it using the command: 
      mvn install:install-file -DgroupId=mongo-model -DartifactId=mongo-model -Dversion=LATEST -Dpackaging=jar -Dfile=/path/to/file

  Alternatively, if you host your own repository you can deploy the file there: 
      mvn deploy:deploy-file -DgroupId=mongo-model -DartifactId=mongo-model -Dversion=LATEST -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

  Path to dependency: 
    1) org.apache.maven:super-pom:jar:2.0
    2) mongo-model:mongo-model:jar:LATEST

----------
1 required artifact is missing.

for artifact: 
  org.apache.maven:super-pom:jar:2.0

from the specified remote repositories:
  clojars (http://clojars.org/repo/),
  central (http://repo1.maven.org/maven2)


    at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:324)
    at org.apache.maven.artifact.ant.DependenciesTask.doExecute(DependenciesTask.java:170)
    ... 34 more

1 Ответ

3 голосов
/ 08 декабря 2011

Здесь есть две вещи: стандартное разрешение зависимостей и удобство каталога checkouts.

Каталог checkouts

Функциональность checkoutsКаталог довольно прост: Leiningen ожидает найти там один или несколько каталогов, каждый из которых содержит другой проект Leiningen.Обычно вы создаете символические ссылки на другие ваши проекты здесь.Для каждого из связанных проектов в путь к классу добавляются путь источника, путь компиляции и путь ресурсов.(По умолчанию - список каталогов можно настроить.)

Это означает, что пространства имен связанных проектов доступны в родительском проекте, независимо от того, включены они в зависимости или нет.Вы все равно должны включать их в зависимости, чтобы другие люди могли работать с вашей кодовой базой.

Зависимости

Механизм разрешения зависимостей не заботится о каталоге checkouts.Он пытается найти все зависимости в локальном и удаленном репозиториях Maven.Если у вас есть зависимость от локального проекта, который вы никогда не устанавливали в репозитории, то он не может быть найден, и Лейнинген вылетит с ошибкой, подобной показанной в вашем вопросе, даже если проект связан с checkoutsdirectory.

Вам необходимо установить артефакты, от которых вы зависите, хотя бы один раз в вашем локальном хранилище.Это так же просто, как позвонить lein install.Вам не нужно делать это после каждого изменения, поскольку вы всегда используете последний код по символической ссылке checkouts.

Относительно использования LATEST: я бы сказал, что рекомендуется использоватьисправлены номера версий для зависимостей.Это единственный способ предотвратить внезапное прекращение успешной сборки из-за изменений в зависимостях.См. Также этот вопрос: Как мне сказать Maven использовать последнюю версию зависимости?

...