テスト環境で、私はいくつかのアプリケーションで埋め込みjettyを実行しようとしています。アプリケーションはsome-dependency
に依存し、META-INF
フォルダにweb-fragemnt.xml
と指定しています。デバッグ時に、私はフラグメントがserver.handler.metadata.webFragments{Roots,NameMap,ResourceMap}
の下にロードされているが、server.handler.{filters,servlets}
の下で、私はそのフラグメントで宣言されたフィルタやサーブレットが表示されない 私は何をやっている見ることができます組み込みjettyを実行しているときにWebフラグメントをロードする
public static void someMain(...) {
server = new Server(port);
final WebAppContext context = new WebAppContext();
addFragmentIfExists(context);
context.setContextPath("/");
context.setParentLoaderPriority(true);
context.setResourceBase(pathToWebapp);
server.setHandler(context);
}
private void addFragmentIfExists(final WebAppContext context) {
final Optional<URL> url = Stream.of(((URLClassLoader) ClassLoader.getSystemClassLoader()).getURLs())
.filter(u -> u.toString().contains("some-dependency")).findFirst();
url.ifPresent(u -> {
try {
context.getMetaData().addFragment(newResource(u),
newResource(new File(u.getPath(), "META-INF/web-fragment.xml")));
} catch (Exception e) {
...
}
});
}
:私はこのようなフラグメントをロードしようとしています違う? また、フラグメントをロードするためのハックの少ない方法はありますか?私もクラスパスに春のWebフラグメントがあります。クラスパスからロードしようとすると、春のものがロードされます。
おかげで、私は、私は、新しいクラスは、ここですべてとにかくロードがある彼らの、なぜ設定クラスの順序を変更する必要があるかわからない、それを試してみましょうか? また、このソリューションは一般的には十分ではありません。これは、戦争形式のときにjarが既にそのディレクトリにあるためですが、IDEでテストを実行すると、フラグメントは依存関係プロジェクトの対象フォルダ内のclassesディレクトリにあります。 – sagioto
私は突堤: '8.1.5.v20120716'私はこれらの設定クラスomを持っていません。クラスパス – sagioto