2014-12-17 1 views
6

У меня есть some trouble, выполняющий задание Hadoop, которое включает в себя более новую версию Guava, чем та, которая включена в дистрибутив Hadoop (CDH 5.2). Это известная проблема. Я пытаюсь решить его by shading the libraries с помощью плагина Maven. Поэтому я добавил следующие строки в моем pom.xml:Почему перемещение с плагином maven shade не работает?

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>shade</goal> 
     </goals> 
     <configuration> 
      <relocations> 
      <relocation> 
       <pattern>com.google</pattern> 
       <shadedPattern>thirdparty.com.google</shadedPattern> 
      </relocation> 
      </relocations> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

К сожалению, затенение, кажется, не работает. Когда я извлекаю uber-JAR, нет папки thirdparty/com/google, но все же папка com/google.

Есть ли у кого-то идеи, что происходит не так?

+0

Вы нашли решение для этого? Благодаря! – Zongjun

ответ

2

Вам может понадобиться указать явное artifactSet :: включает под <configuration> раздел:

<configuration> 
     <artifactSet> 
      <includes> 
       <include>com.google.guava:*</include> 
       ... 
      </includes> 
     </artifactSet> 
     <relocations> 
     ... 
+0

Для этого вам необходимо указать каждое включение. Это также не устранило проблему затенения. – AaronM

3

Это работает для меня:

<relocations> 
    <relocation> 
    <pattern>com.google.</pattern> 
    <shadedPattern>thirdparty.com.google.</shadedPattern> 
    </relocation> 
</relocations> 

примечание точка в конце картины.

0

Похоже, что вам нужно обратиться к имени пакета в правиле перемещения, а не в maven groupId, я использую rx v1 в своей lib и не хочу загрязнять пространство имен пользователя с ним, pom.xml раздел ниже перезаписывает байт-код, поэтому окончательный uberjar будет иметь rx, но переименован (shaded.rx).

shade relocation doc

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>3.0.0</version> 
    <executions> 
    <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>shade</goal> 
     </goals> 
     <configuration> 
      <relocations> 
      <relocation> 
       <pattern>rx</pattern> 
       <shadedPattern>shaded.rx</shadedPattern> 
      </relocation> 
      </relocations> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
Смежные вопросы