maven - leiningen项目中使用maven的 "LATEST"关键字

标签 maven clojure leiningen

我有两个莱宁根项目。根据this question ,maven 应该允许我使用“LATEST”作为依赖版本。它给我一个错误,提示无法找到版本“LATEST”的依赖项。 This answer代表我如何在本地使用 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

最佳答案

这里有两件事在起作用:标准依赖项解析和 checkouts 目录的便利性。

checkouts 目录

checkouts 目录的功能非常简单:Leiningen 期望在那里找到一个或多个目录,每个目录都包含另一个 Leiningen 项目。通常您会在此处创建指向其他项目的符号链接(symbolic link)。对于每个链接的项目,源路径、编译路径和资源路径都会添加到类路径中。 (默认情况下 - 可以配置目录列表。)

这意味着链接项目的命名空间在父项目中可用,无论它们是否包含在依赖项中。不过,您仍然应该将它们包含在依赖项中,以便其他人可以使用您的代码库。

依赖项

依赖解析机制不关心 checkouts 目录。它尝试查找本地和远程 Maven 存储库中的所有依赖项。如果您依赖于从未安装在存储库中的本地项目,则无法找到该项目,并且 Leiningen 将出现类似问题中所示的错误,即使该项目已链接到 中checkouts 目录。

您需要在本地存储库中至少安装一次您所依赖的 Artifact 。这就像调用 lein install 一样简单。您不需要在每次更改后都执行此操作,因为您始终通过 checkouts 符号链接(symbolic link)使用最新的代码。

关于使用LATEST:我想说的是,鼓励对依赖项使用固定版本号。这是防止曾经成功的构建由于依赖项的更改而突然中断的唯一方法。另请参阅这个问题:How do I tell Maven to use the latest version of a dependency?

关于maven - leiningen项目中使用maven的 "LATEST"关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8426195/

相关文章:

Clojure 和 leiningen : declare and require namespace

通过分布式 jmeter 实例和 bamboo 进行性能测试

java - 将类路径目录/文件 Autowiring 到 Bean

maven - 如何从 Maven 测试运行中获取格式良好的 JUnit 报告?

clojure - 如何在 Clojure 中将字符串转换为函数?

testing - 你如何在 clojure 中使用它自己的命名空间之外的类型?

maven - 在kubernetes上的Jenkinsfile Maven构建中正确覆盖 "settings.xml"吗?

list - clojure 尾递归中的 java.lang.StackOverflowError

dictionary - Clojure 惯用的方式来更新 map 的多个值

java - 在 Leiningen 项目的 Google Maven 存储库中找不到 Firebase jar