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に追加されない可能性があります。
どうすればこの問題を解決できますか?
この機能は、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>