Подтвердить что ты не робот

Минимизируйте Uber Jar правильно, используя Shade-Plugin

Я использую Maven-Shade-Plugin для создания runnable Uber-jar. Согласно последнему кадру на этой странице размер банки может быть сведен к минимуму с помощью:

<configuration>
      <minimizeJar>true</minimizeJar>
</configuration>

Но эта функция не учитывает классы, объявленные в файле log4j.properties. Следовательно, например, org.apache.log4j.appender.TimeAndSizeRollingAppender не включен в Uber-jar, хотя он объявлен в файле log4j.properties.

Я верю, что у меня будет такая же проблема с Spring. Если мой код относится только к интерфейсу A, а мой файл Spring содержит экземпляр класса B, который реализует A, то B не может быть добавлен в банку, так как его не в коде.

Как я могу решить эту проблему?

4b9b3361

Ответ 1

Эта функциональность была добавлена ​​в версию 1.6 плагина maven-shade (только что выпущена). minimJar теперь не будет удалять классы, которые были специально включены в фильтры. Обратите внимание, что включение некоторых классов артефактов в фильтр исключает не указанные классы для этого артефакта, поэтому обязательно включите все классы, которые вам нужны.

Здесь приведен пример конфигурации плагина:

<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>

В onlu включены определенные классы, добавьте их как включающие использование косых черт в имени класса в фильтре (опять же, не включенные классы будут автоматически исключены).

<filter>
  <artifact>org.yourorg:your-artifact</artifact>
  <includes>
    <include>org/yourorg/yourartifact/api/*</include>
    <include>org/yourorg/yourartifact/util/*</include>
  </includes>
</filter>