API として Jetty 8.1.9 を使用し、サーバーに WebAppContext ハンドラーを追加して手動でデプロイしています。
Server server = new Server();
WebAppContext webapp = new WebAppContext();
webapp.setContextPath(CONTEXT_PATH);
webapp.setWar(WEBAPP_PATH);
webapp.setExtractWAR(false);
server.setHandler(webapp);
server.start();
server.join();
Web アプリケーションの WEB-INF/lib に jar が含まれていない場合、これは問題なく機能します。ただし、webapp に jar が含まれている場合、次の例外が発生します。
java.lang.IllegalArgumentException: !file: jar:file:/F:/projects/jetty-example/webapps/app.war!/WEB-INF/lib/whatever.jar
at org.eclipse.jetty.webapp.WebAppClassLoader.addClassPath(WebAppClassLoader.java:245)
設定すると動作しますwebapp.setCopyWebInf(true);
私は間違っていますか、それはバグですか、それとも Jetty は war から直接ライブラリをロードできませんか?
編集:
私のセットアップに関するもう少し情報を提供するために、Jetty は、start.jar と同様に、すべてをセットアップするメイン クラスを持つ jar の内部に埋め込まれています。これは、標準的な桟橋の配置を単純化すること (もしそうなら、ファサード) を意図しています。特定の war パッケージのみが使用されますが、オプションである可能性があるため、実行可能 jar の外部にあります。したがって、ディレクトリ構造は次のようになります。
/ baseDirectory
| embedded-jetty.jar
/ webapps
| myWar1.war
| myWar2.war