6

Weblogic と Tomcat を再起動せずに、アプリケーションで複数の Java ファイルをコンパイルしたいと考えています。そうしないと、これには多くの時間がかかります。このために、Eclipse で Hotswap プラグインを1 つ取得しましたが、これはすべての場合に機能するわけではありません。単一ファイルのコンパイルで機能すると言われています。それを使用しても、すべての場合に機能するとは限りません。

これを行うことができる他の方法はありますか、またはこれに役立つ他のプラグイン/スクリプト/ソフトウェアはありますか?

オープンソースのものがあれば非常に助かります。

前もって感謝します。

4

6 に答える 6

7

1 つはクラスをコンパイルすることですが、ホットスワップと呼ばれる、クラスをリロードして使用するための Java VM も必要です。クラスの最適なホットスワップを行うには、 javarebelのようなものが必要です。通常の SUN JVM よりも多くの種類のコード変更をホット リロードできます。デプロイを展開モードで実行すると、家から解放され、コードの変更を 1 秒ほどでテストできます。私たちはかなりテスト主導なので、アプリケーション全体をアセンブルするときの短いフェーズでのみ javarebel を使用しますが、それは非常にうまく機能します。

于 2009-02-16T07:05:00.847 に答える
2

Java HotSpot VMはこれを自動的に実行しますが、すべての場合に実行されるわけではありません...

まず、「実行」セッションではなく、「デバッグ」セッションを実行する必要があります。

次に、いくつかの変更により、強制的に再起動します。基本的な考え方は、クラスへのインターフェースが変更された場合(実際のJavaインターフェースではなく、メソッドsigs)、VMはクラスの内容をインラインで置き換えることができないということです。

このためのプラグインは必要ありません。最近のVMだけです。

これは、次のようないくつかの状況で発生します

  • メソッドの追加
  • メソッドの削除
  • メソッドシグネチャの変更
  • クラス階層の変更(スーパークラス、実装されたインターフェース)

クラスにエラーを導入した場合にも発生する可能性があります。(中括弧の不一致などのエラーの場合)

Javaファイルを保存すると、eclipseはそれをコンパイルします。エラーが発生した場合、Eclipseは例外スローを挿入して、未解決のコンパイルエラーがあることを示します。(これを実行すると、最後に成功したコンパイルが表示されるだけでなく、コンパイラエラーがあることが明らかになります)

于 2009-02-16T14:37:46.187 に答える
1

開発時に常に再デプロイするのは非常に面倒であることに同意します。

私は、Tomcatでうまく機能する非常に優れたhotdeployメカニズムを備え、非常に手頃な価格で30日間の試用版があるMyEclipseを調べることをお勧めします。

サーバーに再デプロイするためのEclipseの標準のJavaEEメカニズムは、それほど高速ではありません。

于 2009-02-16T14:03:56.377 に答える
1

Eclipse はわかりませんが、Netbeans は使用しています。Netbeans はこれをかなりうまく行っています。最新バージョンには、Java ファイルを保存するときに自動的に再コンパイルするオプションもあります。

これがあなたの質問に正確に答えていないことは知っています。プロジェクトのどの部分に取り組んでいるかによって、おそらく Netbeans と Eclipse の両方を使用できます。

編集: Tomcat を使用すると、Web アプリをリロードできます。これは、Tomcat が新しいクラスを参照している場合にのみ役立ちます。プロジェクトが最初にビルド ディレクトリにコンパイルされ、そこから WAR が作成される場合は、ビルド ディレクトリの WAR ポイントを指す代わりに、Tomcat に移動して Web アプリをインストールできます。

Tomcat では、サイト構成ファイルを tomcat/conf/Catalina/localhost の下に配置する必要がある場合があります。このファイルの内容は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="C:/Projects/MyWebApp/build/web" path="/MyWebApp"/>

リロードの手順はこちら: http://www.cs.ucl.ac.uk/teaching/java/tomcatfaq.html#changeservlet

これを数回行うと、Tomcat がメモリ不足になります。これは、PermGenSpace と呼ばれるものが原因です。詳しく知りたい場合は、それについて読んでください。解決策は、JVM メモリ、PermGenSize (-XX:MaxPermSize を使用) を増やし、最後に Tomcat を時々再起動することです。

EDIT2:アプリをリロードするとログアウトされる場合は、一部のクラスに「implements Serializable」を追加することで、コンテナーを簡単に取得してセッション データをディスクにシリアル化できる場合があります。その後、アプリをリロードした後にログインする必要はありません。

于 2009-02-16T06:42:55.050 に答える
0

このページを読むと、非常に簡単に実行できます: http://blog.redfin.com/devblog/2009/09/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse.htmlを参照してください 。Dan Fabulich に感謝します。

于 2009-11-07T15:16:23.410 に答える