【问题标题】:A clojure lib published locally isn't getting found找不到本地发布的 clojure 库
【发布时间】:2016-05-15 03:33:35
【问题描述】:

我在本地构建了一个 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.

为什么是“cental”和“clojars”?为什么不在本地寻找呢?

在本地 repo m2 中,它的全名和路径是:

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

【问题讨论】:

  • 您是否检查过您期望的jar 是否在.m2 本地目录中?此外,用相同的名称调用它可能更容易,但最后说 -SNAPSHOT,这意味着只为 lein install 更改 lein 项目文件。
  • @ChrisMurphy,为什么它不在 m2 中?没有出错。更新了我的问题。有 2 个版本 0.1.0 和 0.1.0-snaphot。

标签: maven clojure leiningen


【解决方案1】:

也许 lein 仍然认为 jar 资源是外部资源。在这方面,甚至目录名称中都包含“clojars”这一事实非常可疑。 (我的 .m2 目录没有这样的外部名称)。

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

如果这对你有用,那就太好了。我意识到它并不能完全回答你的问题。我不明白为什么 lein 并不总是在外部和本地看起来。但是那个'clojars'是可疑的。

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

【讨论】:

    【解决方案2】:

    如果.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 存储库中正确的字段是什么。

    【讨论】:

    • @PeterT。我编辑了我的答案,请检查您在 ` ~/.m2/repository/org/clojars/my_nickname/my-lib1/0.1.0/my-lib-0.1.0.pom` 中的内容(例如)。跨度>
    【解决方案3】:

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

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

    把它放回去让它看起来又是本地的:

    (defproject default-db-format "0.1.0"
    

    【讨论】:

      猜你喜欢
      • 2022-07-09
      • 2015-12-19
      • 2016-12-28
      • 2013-09-23
      • 1970-01-01
      • 2015-12-26
      • 2019-12-27
      • 2018-07-23
      • 1970-01-01
      相关资源
      最近更新 更多