问题描述
我正在从事码头服务,启动该服务时,我得到了很多帮助:
SomeClass scanned from multiple locations: jar: jar1!Someclass.class,jar2!Someclass.class
因此,两个罐子提供了一个类,而我在运行时得到的类是未定义的,这不好。通过查看其他问题,我发现 tattletale 可以帮助诊断问题。该报告在多个Jar文件部分中列出了启动时与jetty相同的类,以及它们所在的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。但是,jscience和javolution提供了一些相同的类。不存在其他对javolution的依赖。
那么我的问题是,我该如何解决这个问题?
我可以在pom.xml中做一些事情,但是我想jscience需要进行自动进化,并且可能会崩溃?
解决方法
听起来像jscience
中关于如何打包jar的错误,可能要向他们提出问题。
他们应该...
- 具有适当的/重点突出的jar和依赖项。
- 或没有依赖性的独立uber jar。
不要混淆这两个概念。
同时,只需使用<dependency>/<exclusions>
来排除导致类重复的特定传递依赖项。
此外,您可能希望运行各种重复的类/资源检查器maven插件中的任何一个,以查找项目中可能存在的其他情况。