3

MavenのデフォルトのWebアプリケーション構成を検討してください(テストケースでは、 https: //repository.apache.org/content/groups/public/archetype-catalog.xmlのstruts2-blank-archetypeを使用しました)。

このアーキタイプには、maven jettyプラグインのバージョン6が付属しています。以下の構成で、/ src / main / webapp / WEB-INF /の下のjspを変更して保存すると、ブラウザーを更新するとこれらの変更が表示されます。

        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.21</version>
            <configuration>
                <scanIntervalSeconds>10</scanIntervalSeconds>
            </configuration>
        </plugin>

(jspを変更するだけで完全なコンテナーのリロードは必要ないため、scantarget要素を配置する必要さえないことに注意してください)。

ただし、プラグインのバージョン8(以下を参照)とまったく同じ構成は機能しません。同じjspを変更すると、ブラウザを更新すると古いJSPコンテンツが表示されます。サーバーを停止して起動するだけで、変更が表示されます。

        <plugin>
            <groupId>org.mortbay.jetty</groupId>
             <artifactId>jetty-maven-plugin</artifactId>
             <version>8.1.7.v20120910</version>
            <configuration>
                <scanIntervalSeconds>10</scanIntervalSeconds>
            </configuration>
        </plugin>

この構成の何が問題になっていますか。また、バージョン8で同じ結果が得られる構成(つまり、サーバーを再起動せずにjspの内容を自動更新する)は何ですか。

編集: これがあなたが試すことができる2分のテストです:

  1. アーキタイプstruts2-archetype-convention( "mvn archetype:generate"、308、パッケージ戦争)を作成します。
  2. pomを編集し、jettyプラグインの構成を上記の構成に設定します(バージョン6)
  3. mvn jetty:run
  4. 「http:// localhost:8080」でブラウザを開きます
  5. ページの「言語」を参照してください
  6. /src/main/webapp/WEB-INF/content/hello.jspを編集します-「言語」を別のものに変更します。保存する。
  7. ブラウザを更新して、変更を確認します。
  8. 手順を繰り返します。手順2で、artifactIdとバージョンを上記のバージョン(バージョン8)に変更します。
  9. JSPで変更を実行した後、更新時にWebページが変更されないことを確認します。
4

3 に答える 3

1

jetty-6 日以降、さまざまなプロジェクト構成を実行するために、プラグインに多くの改良が加えられました。プラグインのドキュメント ページを見て、ニーズに最も適したシナリオを選択し、必要に応じて構成を調整してください。あなたのケースは「アセンブルされていない webapp の実行」の下にあると思われます。

http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin

jetty-9 については、プラグインを最終的に eclipse に移行することに注意してください。これにより、groupId が org.eclipse.jetty に変更され、9.0.0.M2 の jetty-maven-plugin がプロジェクトと共存できるようになります。来週初めに中部にいる(ドキュメントはまだ更新されている)

乾杯

于 2012-10-31T00:24:29.633 に答える
0

mmalmeida、私は標準のjetty-test-webappを使用してこのシナリオをテストしました。jspをsrc/main / webapp / jspに配置し、src / main / webapp/WEB-INFの別のjspに転送します。jvn jetty:runを使用してjetty mavenプラグインを起動すると、転送が正しく行われます。プラグインを実行したまま、WEB-INFでjspを変更し、ブラウザーでshift-reloadを実行すると、変更されたページが期待どおりに取得されます。

scanTargetsまたはその性質の他のものを宣言する必要はないことに注意してください。上記の動作(jspリロード)はjspエンジンの機能であり、開発モードで実行すると、リクエストを受信したときにjspファイルのタイムスタンプをチェックし、必要に応じてオンザフライで再コンパイルします。

これをさらに進めるには、特定のWebアプリに関する詳細(特に、セットアップが今説明したテストシナリオとどのように異なるか)を提供する必要があると思います。

Janに関して

于 2012-11-02T05:10:46.437 に答える
0

以前のコメントの後、この問題の根本原因を特定することができました。これは私たちのユースケースに少し特有のものですが、それにもかかわらず、私はこれをコミュニティと共有しています.

これは基本的に、ファイルのタイムスタンプが原因です。私の作業ディレクトリは、別のサーバーの NFS マウントです。何らかの奇妙な理由*で、そのサーバーの時計が遅れています。これは、9:00 に JSP ファイルを変更すると、ファイルのタイムスタンプが 8:40 になることを意味します。

JSP ファイルのリロードに使用される戦略に関して、Jetty が 6 から 8 に変更された可能性があります。Jetty 6 はファイルのタイムスタンプとリフレッシュを気にしていないようですが、Jetty 8 はより機密性が高く、ファイルをリロードしません。

したがって、ここでの「解決策」は、単純にリモート NFS サーバーのクロックを更新することでした。

*NTPデーモンが実行されていることを意味し、ntpサーバーにpingを実行できます。同じネットワーク上の他のマシンには同じNTP設定がありますが、このマシンにはまだクロックのずれがあります

于 2012-11-02T09:47:01.380 に答える