Я пытаюсь минимизировать размер UberJar, используя Maven Shade Plugin
minimizeJar
. Похоже, что minimizeJar
включает только классы, которые статически импортированы в код (я подозреваю это, потому что я вижу LogFactory.class
в uber jar на org\apache\commons\logging\
, но классы impl
не включены, поэтому бросать java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl
при запуске uber-jar).настроить Maven Shade minimJar, чтобы включить файлы классов
Могу ли я сказать плагин Maven's Shade для включения указанных пакетов в финальную банку, независимо от того, что предлагает minimizeJar
?
Здесь ПОМ фрагмент того, что я пытаюсь:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
<filters>
<filter>
<artifact>commons-logging:commons-logging</artifact>
<includes>
<include>org/apache/commons/logging/**</include>
</includes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.myproject.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
'org/apache/commons/logging/**' соответствует только каталогам, возможно, вы захотите сопоставить все файлы. Вместо этого используйте 'org/apache/commons/logging/**/*'. – Corubba
Следуя вашему предложению, я попробовал «... logging/**', '... logging/**/*', '... logging /**/*.*', но никто не работал. Я предполагаю, что проблема включает в себя включенные сначала, а затем minimJar игнорирует все остальное и связывает банку, как она считает подходящей. – kunal