используйте maven-shade-plugin, но классы зависимостей отсутствуют в финальной банке

В моем проекте pom.xml у меня есть следующая зависимость:

<dependency>
    <groupId>com.my.library</groupId>
    <artifactId>MyLib</artifactId>
    <version>1.0</version>
    <type>jar</type>
</dependency>

<dependency>
  ...
</dependency>

Я хотел бы, чтобы финальная сборка jar моего проекта включала классы вышеуказанной зависимости com.my.library:MyLib, поэтому я использовал maven-shade-plugin следующим образом:

<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>  
              <filters>
                 <filter>
                   <artifact>com.my.library:MyLib</artifact>
                   <includes>
                       <include>com/my/library/**</include>
                   </includes>
                 </filter>
              </filters>
           </configuration>
        </execution>
     </executions>
</plugin>

Затем я запускаю mvn clean install , мой проект был успешно собран.

Но когда я проверяю содержимое MyProject.jar в каталоге target/, оно не содержит классов из зависимости com.my.library:MyLib, почему? Где я ошибаюсь с maven-shade-plugin?


person user842225    schedule 18.07.2014    source источник
comment
Что вы используете включает? Почему бы не начать без включения/исключения, а затем исключить вещи, которые не должны быть частью полученной банки.   -  person khmarbaise    schedule 19.07.2014
comment
@khmarbaise, поскольку в моем большом проекте использовалось довольно много зависимостей, я хочу включить только классы ОДНОЙ зависимости в финальную банку, поэтому я использую включение вместо исключения.   -  person user842225    schedule 19.07.2014
comment
@ user842225: Я согласен, что вам не нужно вручную исключать библиотеки одну за другой, но в khmarbaise есть смысл. Сначала попробуйте так, чтобы увидеть, включается ли он вообще, а затем исследуйте дальше (и проверьте мой ответ).   -  person carlspring    schedule 23.07.2014


Ответы (2)


Определите <artifactSet>:

<artifactSet>
    <includes>
        <include>com.my.library:MyLib</include>
    </includes>
</artifactSet>

И попробуйте удалить <artifact/> из <filters/>. Это должно сделать это.

person carlspring    schedule 23.07.2014

изменить шаблон на

<includes>
    <include>com/my/library/**.class</include>
</includes>
person jmj    schedule 22.07.2014