Эта функциональность была добавлена в версию 1.6 maven-shade-plugin (только что выпущена). minimalJar теперь не будет удалять классы, которые были специально включены в фильтры. Обратите внимание, что включение некоторых классов артефакта в фильтр исключит неуказанные классы для этого артефакта, поэтому обязательно включите все необходимые вам классы.
Вот пример конфигурации плагина:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
<filters>
<filter>
<artifact>log4j:log4j</artifact>
<includes>
<include>**</include>
</includes>
</filter>
<filter>
<artifact>commons-logging:commons-logging</artifact>
<includes>
<include>**</include>
</includes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
Чтобы включить только определенные классы, добавьте их как включающие, используя косые черты в имени класса в фильтре (опять же, не включенные классы будут автоматически исключены).
<filter>
<artifact>org.yourorg:your-artifact</artifact>
<includes>
<include>org/yourorg/yourartifact/api/*</include>
<include>org/yourorg/yourartifact/util/*</include>
</includes>
</filter>