2016-08-01 9 views
0

Я использую maven для создания банки jar-with-dependencies. Один из файлов jar поставщика в проекте имеет аналогично названные классы с различным случаем. Например, aM.class и am.class.Maven build, по-видимому, перезаписывает классы при создании jar-with-dependencies.

Когда сборка создает jar-файл с jar-with-dependencies, присутствует только aM.class. Кажется, что класс am.class был перезаписан или пропущен. То же самое происходит для всех одинаково названных файлов классов.

У нас есть несколько рабочих обходов, но мне любопытно, почему maven build ведет себя таким образом. Благодаря

Мой ПОМ:

 <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

Да ..... это вроде неловко, но я вроде забыл, что окна не чувствительны к регистру. Баннер поставщика должен быть создан в Linux/Solaris. Использование плагина вместо плагина сборки исправляет мою проблему. Спасибо – Roy

ответ

0

Тот же вопрос классовый конфликт будет с Maven-сборки-плагин, плагин извлекает все банки с зависимостями в сырье классов, и группа его together.It работает в проекте с меньшим количеством зависимостей только для большого проекта со многими зависимостями это вызовет проблему с именем класса Java, отметьте here.

Лучший способ использования maven-shade-plugin, если у вас много банки с потенциально может конфликтовать. Вы также можете использовать функцию relocating в теневом плагине, чтобы явным образом избегать конфликтов.

+0

Спасибо ... Использование maven-shade-plugin работало для меня. – Roy