0

現在、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 構成を変更して、機能するかどうかを確認しようとしました。

これは私が試したことのリストです:

  1. 次のように 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

  2. 次に、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.JettyServer

    Maven 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 であることを意味します。

4

1 に答える 1

1

私はついに答えを見つけました。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>

            <configuration>
                <webAppConfig>
                    <contextPath>XXXX</contextPath>
                </webAppConfig>
                <jettyConfig>jetty.xml</jettyConfig>
            </configuration>
     </plugin>

jetty.xml に以下を追加する必要があります。

    <Call name="addBean">
    <Arg><New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager"><Set name="contexts"><Ref id="Contexts" /></Set><Call name="setContextAttribute"><Arg>org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</Arg><Arg>.*/servlet-api-[^/]*\.jar$</Arg></Call></New></Arg></Call>

<Ref id="DeploymentManager"><Call name="addAppProvider"><Arg><New class="org.eclipse.jetty.deploy.providers.ContextProvider"><Set name="monitoredDirName"><Property name="jetty.home" default="." />/contexts</Set><Set name="scanInterval">1</Set></New></Arg></Call></Ref>

スペースに注意してください。maven jetty プラグインは、jetty.xml の構成内のスペースについて不平を言います

于 2012-06-13T06:19:14.017 に答える