在本地发布的clojure lib无法找到

时间:2016-02-05 08:23:44

标签: maven clojure leiningen

我在本地构建了一个clojure lib(lib1)并将其发布到github和clojars,然后我更改了它的版本并在本地发布。

lein install

# =>
Created /home/me/projects/clojure/my-lib1/target/my-lib1-0.1.0.jar
Wrote /home/me/projects/clojure/my-lib1/pom.xml
Installed jar and pom into local repo.

然后我创建了另一个项目(project2)并在其中执行了此操作:

# project.clj:

;;.............
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.7.0"]
                 [my-lib1 "0.1.0"]]

当我跑“lein deps”时,我得到了这个:

Could not find artifact my-lib1:my-lib1:jar:0.1.0 in central (https://repo1.maven.org/maven2/)
Could not find artifact my-lib1:my-lib1:jar:0.1.0 in clojars (https://clojars.org/repo/)
This could be due to a typo in :dependencies or network issues.
If you are behind a proxy, try setting the 'http_proxy' environment variable.

为什么“中心”和“clojars”?为什么不在本地寻找呢?

在本地仓库m2中,其全名是路径:

 ~/.m2/repository/org/clojars/my_nickname/my-lib1/

3 个答案:

答案 0 :(得分:1)

如果.m2中的路径是“〜/ .m2 / repository / org / clojars / my_nickname / my-lib1 /”,那么您的project.clj应如下所示:

# project.clj:

;;.............

:dependencies [[org.clojure/clojure "1.7.0"]
               [my_nickname/my-lib1 "0.1.0"]]

要查找路径,您可以查看.m2中生成的数据。 举个例子,因为你没有张贴你的。

对于这样的maven-metadata-local.xml

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>cljsjs</groupId>
  <artifactId>react-mdl</artifactId>
  <versioning>
    <release>1.3.0-0</release>
    <versions>
      <version>1.3.0-0</version>
    </versions>
    <lastUpdated>20160202194200</lastUpdated>
  </versioning>
</metadata>

或类似.pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cljsjs</groupId>
  <artifactId>react-mdl</artifactId>
  <version>1.3.0-0</version>
  <name>react-mdl</name>
  <description>React Components wrapper for Material Design Lite UI http://tleunen.github.io/react-mdl/</description>
  <url>http://tleunen.github.io/react-mdl/</url>
  ...

您可以使用[cljsjs/react-mdl "1.3.0-0"],因为语法是groupId / artifactId。如果它们都是相同的,你只能放一个(如你第一次尝试的那样)。因此,请检查~.m2存储库中的正确字段。

答案 1 :(得分:0)

也许莱恩仍然认为jar资源是外部资源。事实上即使目录的名称中有'clojars',在这方面也是非常可疑的。 (我的.m2目录没有这样的外部名称。)

如果您使用不同的文件名 - 例如将-SNAPSHOT放在最后,然后安装它,lein应该知道-SNAPSHOT文件是本地文件,并在本地查找。

如果那对您有用,那么很棒。我意识到它并没有完全回答你的问题。我不明白为什么lein并不总是从外部和本地看。但那时'clojars'是可疑的。

编辑查看我的其他答案 - 'clojars'很可能来自您的lein项目的名称。

答案 2 :(得分:0)

我遇到了同样的问题并修复了它。在我的例子中,它是project.clj文件的defproject。这是一个不会在本地看起来的那个:

(defproject org.clojars.cjmurphy/default-db-format "0.1.0"

将它放回原位使它再次在本地看起来:

(defproject default-db-format "0.1.0"