1

boot-clj 在启动时显示很多关于版本冲突的警告:它们看起来像这样:

Warning: version conflict detected: org.clojure/clojure version changes from 1.5.1 to 1.8.0
Warning: version conflict detected: clj-time version changes from 0.8.0 to 0.12.0
Warning: version conflict detected: riddley version changes from 0.1.7 to 0.1.12
Warning: version conflict detected: org.codehaus.plexus/plexus-utils version changes from 2.0.7 to 2.0.6
Warning: version conflict detected: org.clojure/tools.namespace version changes from 0.2.11 to 0.2.10
Warning: version conflict detected: com.fasterxml.jackson.core/jackson-core version changes from 2.1.1 to 2.3.2

我不太明白为什么有时第一个版本低于另一个版本,有时反之亦然。看起来我无法影响他们中的大多数人。例如在我的项目中我需要clj-timeversion 0.12.0,所以我猜警告来自一个库,它本身需要另一个版本的 clj-time。

有没有办法修复它们,或者我是否总是使用该-q标志来“抑制引导本身的输出”?这可能会阻止显示其他可能更重要的输出吗?

4

1 回答 1

2

例子:

文件/tmp/stackoverflow/boot.build

(set-env! :dependencies '[[clj-time "0.12.0"]
                          [joda-time "2.9.4"]])

在终端中:

Borkdude@MBP /tmp/stackoverflow $ boot show -d
Warning: version conflict detected: joda-time version changes from 2.9.3 to 2.9.4
Warning: version conflict detected: joda-time version changes from 2.9.3 to 2.9.4
[clj-time "0.12.0"]
└── [org.clojure/clojure "1.8.0"]
[joda-time "2.9.4"]
Borkdude@MBP /tmp/stackoverflow $ boot show -p
Warning: version conflict detected: joda-time version changes from 2.9.3 to 2.9.4
Warning: version conflict detected: joda-time version changes from 2.9.3 to 2.9.4
[✔] joda-time
    ✔ 2.9.4
      joda-time
    ✘ 2.9.3
      clj-time

所以,boot show -d会告诉你有效的传递依赖树。boot show -p将提供有关冲突的更多详细信息。joda-time这里它告诉我们对pull in的依赖joda-time 2.9.4,但它与clj-time想要 pull in相冲突joda-time 2.9.3

假设我们不joda-time直接依赖于其他库foo,它依赖于joda-time 2.9.4. clj-time然后,我们可以通过在:上使用排除项来消除此警告,[clj-time "0.12.0" :exclusions [joda-time]]从而2.9.4在没有警告的情况下进入我们的项目。

于 2016-10-08T21:01:49.037 回答