2016-08-01 76 views
0

我正在使用maven构建一个jar-with-dependencies jar。项目中的其中一个供应商jar文件具有类似名称的不同大小写。例如aM.class和am.class。Maven构建似乎是在创建与依赖关系的jar时覆盖类

当构建创建“jar -with-dependencies”jar文件时,只存在aM.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> 
+0

嗯,这可能是由于你在Windows上编译,它是不区分大小写的操作系统。但我不确定操作系统为什么会在解压依赖的时候起作用。试用最新版本的'maven-assembly-plugin',它是2.6。 – Tunaki

+0

如果你真的有名字相同的类,它们的包是一样的,类加载器应该如何处理这样的事情?哪个课程首先被加载? – khmarbaise

+0

是啊.....这是一种尴尬,但我有点忘记窗口不区分大小写。 vendor jar必须在Linux/Solaris上生成。使用阴影插件而不是程序集插件修复了我的问题。谢谢 – Roy

回答

0

同一类冲突问题将Maven的组装插件发生,这个插件提取所有的依赖罐子到原料类,组它together.It项目较少依赖工作只有对于具有很多依赖项的大型项目,它会导致Java类名冲突问题,请检查here

更好的使用方法maven-shade-plugin如果您有许多瓶子可能会发生冲突。你也可以relocating阴影插件明确避免冲突

+0

谢谢......使用maven-shade-plugin为我工作。 – Roy

相关问题