要做的第一件事是尽可能消除重叠类的许多明显原因。例如:
- 您对spring 2.5.6和spring 3.1.4都有依赖性,这将给您带来更多的问题,而不仅仅是阴影插件。设置模块依赖性,以便您只有一个版本的spring。如有必要,请使用依赖项排除(例如,您具有不可控制的传递性依赖项)。
- 修复依赖版本冲突后,您还可以使用shade插件配置来配置将哪些jar放入uber-jar,如http://maven.apache.org/plugins/maven-shade-plugin/examples/includes中所述-excludes.html
- 一些罐子可能包含重叠罐子中的所有类。
- 我怀疑commons-logging-1.1.3.jar具有commons-logging-api-1.1.jar中声明的类的超集。在这种情况下,您可以排除API jar。
- 响应于已编辑的问题 ,javax.mail-1.5.1.jar包含javax.mail-api-1.5.1.jar中的类的超集。由于这些版本显然是相同的版本,并且重叠的类应该相同,因此使用重叠的类构建带阴影的jar不会造成任何伤害(它将从最后处理的jar中获取这些类)。但是,如果排除api jar,则构建会更整洁并且会更快。
您不太可能需要在有阴影的jar中保留类的冲突版本。如果这样做,shade插件还允许重定位类,如http://maven.apache.org/plugins/maven-
shade-plugin/examples/class-
relocation.html中所述



