2016-08-01 51 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

相關問題