【问题标题】:Leiningen error: Could not transfer artifact no supported algorithms foundLeiningen 错误:无法传输工件未找到支持的算法
【发布时间】:2015-06-21 18:51:11
【问题描述】:

我正在尝试在我的 Clojure 应用程序中使用 jar 文件。我以前从未这样做过,但是在阅读网络上的各种文章时,我开始这样做,在我的项目内部:

mkdir maven_repository

mvn install:install-file -DgroupId=local -DartifactId=nlp -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dfile=original-nlp-1.0-SNAPSHOT.jar  -DlocalRepositoryPath=maven_repository 

在我的 project.clj 文件中,我有:

 [local/nlp "1.0-SNAPSHOT"]

但是当我跑步时:

lein clean
lein uberjar

我得到这个错误:

Could not transfer artifact local:nlp:pom:1.0-SNAPSHOT from/to local (/salesslick/maven_repository/): no supported algorithms found

我已经检查过这样的事情:

lein uberjar

(Retrieving local/nlp/1.0-SNAPSHOT/nlp-1.0-SNAPSHOT.pom from local)
(Could not transfer artifact local:nlp:pom:1.0-SNAPSHOT from/to local   (file:/Users/charlottesville/projects/ollio/salesslick/maven_repository/): no supported algorithms found)
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.
Uberjar aborting because jar failed: Could not resolve dependencies

cat local/nlp/1.0-SNAPSHOT/nlp-1.0-SNAPSHOT.pom

cat maven_repository/local/nlp/1.0-SNAPSHOT/nlp-1.0-SNAPSHOT.pom

<?xml version="1.0" encoding="UTF-8"?>
  <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>local</groupId>
  <artifactId>nlp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <description>POM was created from install:install-file</description>
</project>

lein --version
Leiningen 2.4.1 on Java 1.8.0_25 Java HotSpot(TM) 64-Bit Server VM

我做错了什么?

【问题讨论】:

  • 这可能会有所帮助:gist.github.com/stuartsierra/3062743
  • 谢谢。我就是这样工作的。
  • 什么对我有用::plugins [ [lein-localrepo "0.5.3"] ;;在本地安装 java 工件,甚至使用假的 artifactId

标签: java clojure leiningen


【解决方案1】:

真的准时加入...

我遇到了同样的问题,解决方案似乎是实际使用 maven deploy 而不是 install。

所以命令看起来像这样:

mvn deploy:deploy-file -DgroupId=local -DartifactId=bar \
  -Dversion=1.0.0 -Dpackaging=jar -Dfile=bar.jar \
  -Durl=file:repo

你当然也需要

:repositories {"project" "file:repo"}

在你的 defproject 和

[local/bar "1.0.0"]

在您的依赖项中。 请注意,在 -Durl=file:repo 中需要文件(虽然很明显),并且 repo 是存储库根文件夹中的一个文件夹。

使用纯 Leiningen 并忘记任何 mvn 命令来实现相同结果的另一种方法是使用

lein deploy project local/bar 1.0.0 bar.jar

而不是上面显示的 mvn 命令。例如,这可以省去在 docker 容器上实际安装 maven 的麻烦(这也可能很棘手,具体取决于容器操作系统)。

所有这些信息均来自here

【讨论】:

  • 谢谢,不过我想知道你是怎么找到跟我一样古老的问题的?
  • 真正对我有用的是使用 local-repo 插件,这太棒了。
  • :插件 [ [lein-localrepo "0.5.3"] ;;在本地安装 java 工件,甚至使用假 artifactId ]
  • 我需要它在 Docker 容器中工作 - 我不确定使用 lein-localrepo 自动化该过程有多容易,所以我选择了 maven。最后 maven 是不需要的,这在没有外部依赖的情况下工作,只需要在项目文件中进行一些调整(:repositories + 依赖本身)和终端中的单行 - lein deploy project xxx。
【解决方案2】:

我只需要自己解决这个问题。经过一番谷歌搜索,我得到了更多 困惑,因为有太多不同的解决方案。最后,它 原来是真的容易。

Basically, I just used the lein-localrepo plugin. 

1. Add the plugin to my plugins section of profiles.clj i.e.


    {:user 
      {:plugins [[lein-ancient "0.6.10"]
                 [jonase/eastwood "0.2.3"]
                 [lein-kibit "0.1.3"]
                 [lein-bikeshed "0.4.1"]
                 [lein-localrepo "0.5.3"]]
      :dependencies [[slamhound "1.5.5"]]
       :aliases {"slamhound" ["run" "-m" "slam.hound"]}}}
  1. Ran lein localrepo coords 获取工件/id 的东西

    lein localrepo 协调 jcifs-1.3.18.jar

  2. 将 jar 添加到我的 .m2 存储库中

    lein localrepo install jcifs-1.3.18.jar jcifs/jcifs 1.3.18

  3. 将依赖项添加到我的 project.clj

  4. 运行 lein 部门以确保一切正常

  5. 在我的 clj 文件中,在 ns 标头中添加了必要的 :import 行

完美运行!

这确实意味着如果我想在另一台机器上构建它,jar 文件有 添加到该系统上的 .m2 中。理论上,您可以指定一个 项目特定的存储库目录,然后将其全部捆绑起来,但我更喜欢 将我的罐子或罐子放在一个地方。

【讨论】:

  • 感谢您的回答,虽然得到一个 18 个月大的问题很有趣!
  • 我应该说,我也是这样做的。遇到这个问题的每个人都应该使用 local-repo 插件。
猜你喜欢
  • 2021-07-23
  • 2013-06-21
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
相关资源
最近更新 更多