Maven shade Pluginは、文字列のクラス/パッケージ名を無視します。これはJavaのリフレクションでは一般的です。 "シェード"しようとしているライブラリがClass.forName( "originalpackagename ....")を使用している場合、元のパッケージ名は変更されないため、影付きの依存関係は機能しません。Maven Shade Plugin for Java reflection
servlet.addServletWithMapping("org.mortbay.jetty.servlet.DefaultServlet",
URIUtil.SLASH);
とさらに悪いことにするようなコードで 同じ話:
private String[] _serverClasses = {
"-org.mortbay.jetty.plus.annotation.", // don't hide
"-org.mortbay.jetty.plus.jaas.", // don't hide
"-org.mortbay.jetty.plus.naming.", // don't hide
"-org.mortbay.jetty.plus.jaas.", // don't hide
"-org.mortbay.jetty.servlet.DefaultServlet", // don't hide
"org.mortbay.jetty.",
"org.slf4j."
};
(例は桟橋サーバーのソースコードからコピー)
多分Mavenのシェードのためにすでに利用可能ないくつかのResourceTransformerがあり、これは文字列のソースコード内の元のパッケージ/クラス名を置き換えますか?