2

我正在开发码头服务,启动它时,我得到了很多:

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

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

tattletale_conflicts

看着

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 依赖项拉动了拉动 javolution 的 jscience。但是 jscience 和 javolution 提供了一些相同的类。不存在对 javolution 的其他依赖。

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

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

4

1 回答 1

0

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

他们应该要么...

  • 有一个适当/集中的 jar 和依赖项。
  • 或没有依赖关系的独立 uber jar。

不要混淆这两个概念。

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

此外,您可能希望运行任何各种重复的类/资源检查器 maven 插件来查找您的项目中可能存在的任何其他案例。

于 2020-10-09T11:47:04.787 回答