解析 "Multiple Jar files" 又名 "scanned from multiple locations"

Resolving "Multiple Jar files" aka "scanned from multiple locations"

我正在做一个码头服务,当启动它时,我得到了很多:

SomeClass scanned from multiple locations: jar: jar1!Someclass.class, jar2!Someclass.class

所以一个 class 是由两个 jar 提供的,而我在运行时得到的是未定义的,这不好。查看其他问题,我发现 tattletale 可以帮助诊断问题。该报告在 多个 Jar 文件 部分中列出了与 Jetty 启动时相同的 classes 以及它们所在的 jar。 冲突的一个子集是:

正在看

mvn dependency:tree -D verbose

我得到:

+- ca.uhn.hapi.fhir:hapi-fhir-jpaserver-base:jar:3.7.0:compile
|  |                   ...
|  +- org.jscience:jscience:jar:4.3.1:compile
|  |  \- org.javolution:javolution:jar:5.2.3:compile

所以我的 fhir-base-jpaserver-base 依赖项似乎拉动了 jscience,它拉动了 javolution。但是 jscience 和 javolution 提供了一些相同的 classes。不存在对 javolution 的其他依赖。

那么我的问题是,我该如何解决这个问题?

我可以在 pom.xml 中做一些事情,但我想 jscience 需要 javolution,并且可能会中断?

听起来像是 jscience 中关于他们如何打包 jar 的错误,可能想向他们提出问题。

他们应该...

  • 有一个 proper/focused jar 和依赖项。
  • 或没有依赖项的独立 uber jar。

不要混淆这两个概念。

同时,只需使用 <dependency>/<exclusions> 排除导致重复的特定传递依赖项 类。

另外,您可能想要 运行 各种重复的 class/resource 检查器 Maven 插件中的任何一个,以查找您可能在项目中出现的任何其他案例。