解决“多个Jar文件”也称为“从多个位置扫描”

问题描述

我正在从事码头服务,启动该服务时,我得到了很多帮助:

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

因此,两个罐子提供了一个类,而我在运行时得到的类是未定义的,这不好。通过查看其他问题,我发现 tattletale 可以帮助诊断问题。该报告在多个Jar文件部分中列出了启动时与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的依赖关系拉扯了导致科学发展的jscience。但是,jscience和javolution提供了一些相同的类。不存在其他对javolution的依赖。

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

我可以在pom.xml中做一些事情,但是我想jscience需要进行自动进化,并且可能会崩溃?

解决方法

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

他们应该...

  • 具有适当的/重点突出的jar和依赖项。
  • 或没有依赖性的独立uber jar。

不要混淆这两个概念。

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...