web-dev-qa-db-ja.com

Shade-Pluginを使用して、UberJarを正しく最小化します

Maven-Shade-Pluginを使用して、実行可能なUber-jarを作成しています。 このページ の最後のフレームによると、jarのサイズは次を使用して最小化できます。

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

ただし、この機能では、log4j.propertiesファイルで宣言されているクラスは考慮されていません。したがって、例えばorg.Apache.log4j.appender.TimeAndSizeRollingAppenderは、log4j.propertiesファイルで宣言されていますが、Uber-jarには含まれていません。

春も同じ問題に直面すると思います。コードがインターフェースAのみを参照し、SpringファイルにAを実装するクラスBのインスタンス化が含まれている場合、Bはコードに含まれていないため、jarに追加されない可能性があります。

どうすればこの問題を解決できますか?

25
summerbulb

この機能は、maven-shade-pluginのバージョン1.6(リリースされたばかり)に追加されました。 minimumJarは、フィルターに特に含まれているクラスを削除しないようになりました。アーティファクトのクラスの一部をフィルターに含めると、そのアーティファクトの指定されていないクラスが除外されるため、必要なすべてのクラスを含めるようにしてください。

プラグイン設定の例を次に示します。

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