我正在使用maven构建一个带有依赖关系的jar。项目中的一个供应商jar文件具有名称相似、大小写不同的类。例如aM.class和aM.class.
当构建创建"带有依赖项的jar"jar文件时,只有一个M.class存在。am.class似乎已被覆盖或跳过。对于每个名称相似的类文件,都会发生同样的情况。
我们有几个解决方案,但我很好奇为什么maven构建会这样。感谢
我的pom:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.1</version>
<configuration>
<archive>
<manifest>
<mainClass>com.mytest.MyTest</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<dependencies>
<dependency>
<groupId>com.bloomberglp</groupId>
<artifactId>blpapi3</artifactId>
<version>3.10.1</version>
</dependency>
</dependencies>
maven汇编插件会出现相同的类冲突问题,该插件将所有依赖jar提取到原始类中,并将其分组在一起。它只适用于依赖项较少的项目,对于依赖项较多的大型项目,它会导致Java类名冲突问题,请查看此处。
如果您有许多可能发生冲突的jar,使用maven shade插件的更好方法。您还可以在shade插件中重新定位功能,以明确避免冲突