現在、jetty バージョン 6 (mortbay) と 8 (eclipse) サーバーの両方で実行される Java アプリケーションを開発しています。
バージョンの絶え間ないアップグレードが時々行われるため、プロジェクトを維持するのは少し多忙であり、jetty の環境で実行される統合テストを追加したいので、maven をそれに統合することを考えました。私はすでに、最初はmavenベースのプロジェクトに取り組んできました。私はそのプロジェクトを Maven プロジェクトに変換することができましたが、それも完全に実行されているようです。
唯一の問題は、プロジェクトの 1 つの機能について、コンテキスト デプロイヤーを maven の jetty プラグインに実際に追加する必要があることです。mortbay の jetty.xml 構成ファイルと eclipse の jetty.xml を比較したところ、mortbay のバージョンにはコンテキスト デプロイヤーが含まれているのに対し、コンテキスト デプロイヤーの兆候はなく、その構成は jetty-contexts.xml で指定されていることがわかりました。
maven および jetty xml 構成を変更して、機能するかどうかを確認しようとしました。
これは私が試したことのリストです:
次のように pom.xml に jetty-contexts.xml を追加します。
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.0.RC5</version> <configuration> <jettyConfig>jetty.xml</jettyConfig> <jettyConfig>jetty-contexts.xml</jettyConfig> </configuration> </plugin>
これにより、次のエラー メッセージが表示されました。2012-06-12 11:04:15.182:WARN:oejx.XmlConfiguration:Config error at java.lang.IllegalStateException: No object for id=DeploymentManager
次に、jetty.xml を次のように変更しようとしました。
http://wiki.eclipse.org/Jetty/Feature/ContextDeployerを読み、次の構成を追加しました。
<Ref id="DeploymentManager"> <Call name="addAppProvider"> <Arg> <New class="org.eclipse.jetty.deploy.providers.ContextProvider"> <Set name="monitoredDir"><Property name="jetty.home" default="."/>/contexts</Set> <Set name="scanInterval">1</Set> </New> </Arg> </Call> </Ref>
これにより、同じエラー メッセージが表示されました: 2012-06-12 11:04:15.182:WARN:oejx.XmlConfiguration:Config error at java.lang.IllegalStateException: No object for id=DeploymentManager
だから私はそれを次のように変更しました:
<Call name="addAppProvider"> <Arg> <New class="org.eclipse.jetty.deploy.providers.ContextProvider"> <Set name="monitoredDir"><Property name="jetty.home" default="." />/contexts</Set> <Set name="scanInterval">1</Set> </New> </Arg> </Call>
そして、これにより java.lang.ClassNotFoundException: org.eclipse.jetty.deploy.providers.ContextProvider が発生しました
上記のリンクでは、「現在、コア展開インフラストラクチャの拡張である ContextProvider メカニズムがこの機能を実装している」ことが示されています。したがって、この機能にはプラグインを含める必要があると思います。それから私はhttp://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin#Using_GZip_Compression_and_Other_Jetty_Extensionsに出くわしました
これにより、拡張機能を追加する方法がわかりました。次に、jetty-deploy jar に ContextProvider を含む jar を見つけました。
次に、pom.xml に次の構成を追加しました。
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.0.RC5</version> <dependencies> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-deploy</artifactId> <version>8.1.0.RC5</version> </dependency> </dependencies> ... </plugin>
これにより、次のエラーが発生します: 2012-06-12 13:38:53.375:WARN:oejx.XmlConfiguration:Config error at
<Call name="addAppProvider">
... No Method:<Call name="addAppProvider">
on class org.mortbay.jetty.plugin.JettyServerMaven jetty プラグイン jar を深く掘り下げると、addLifeCycle メソッド (非推奨) が見つかったので、次の構成を追加しました (jetty 6 コンテキスト ファイルに書かれているものと同じです):
<Call name="addLifeCycle"> <Arg> <New id="hotdeployer" class="org.eclipse.jetty.deploy.providers.ContextProvider"> <Set name="monitoredDir"><Property name="jetty.home" default="." />/contexts </Set> <Set name="scanInterval">1</Set> </New> </Arg>
その後、Maven jetty プラグインが実行を開始しました。プロジェクトの下に contexts フォルダーを作成し、コンテキスト ファイルを追加すると、jetty が次のエラーをスローします。
org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java :142) での java.lang.NullPointerException org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.ja va:53) でorg.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:604) at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:535) at org.eclipse.jetty.util.Scanner.scan( Scanner.java:398)
ソース コードを見ると、142 行目
_deploymentManager.addApp(app);
はデプロイメント マネージャーが null であることを意味します。