22

Linux Ubuntu Natty Narwhal で Tomcat 7.0.12 を使用して、Eclipse Helios Service Release 1 を実行しています。

どうやら理由もなく機能しなくなるまで、Webアプリケーションを喜んでホットに再デプロイしてきました。次の例外が表示されます。

SEVERE: Allocate exception for servlet Index
java.lang.ClassNotFoundException: obliquid.servlet.Index
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
  • [サーバー] タブで、「Tomcat v7.0 Server at localhost [Started,Synchronized]
  • プロジェクトが Tomcat v7.0 Server の子として表示される
  • プロパティ、Java ビルド パス、ソース Ive Project/srcソース フォルダ
  • [プロパティ] の [Web 配置アセンブリ] で、次のマッピングを行いました: /WebContent -> //src -> /WEB-INF/classes/test -> /build/classes
  • 私のsrcディレクトリには、obliquid/servlet/Index.javaにサーブレットが含まれています
  • 私はすでにClean Module Work Directory...Publishをクリックしようとしました
  • Eclipse Servers タブ内からサーバーを停止および開始しようとしました

他に何をチェックすればよいですか?ありがとうございました。

更新現在、私は新しいプロジェクトに取り組んでいますが、古いプロジェクトをチェックするために戻ってきましたが、不思議なことに今は機能しています。何が起こったのかを見つけることはできないと思います。

しかし、今日の新しいプロジェクトでは、明らかな理由もなく 404 エラーが発生し、Tomcat サーバーを右クリックして [クリーン...] を選択すると役立つことがわかりました。多分それは助けになったかもしれません。

「Clean...」を選択すると、「Clean はすべての公開状態を破棄し、最初から再公開します。公開されたすべてのリソースを削除してもよろしいですか?」と表示されます。はいを選択して、問題を解決しました

更新 2新しいプロジェクトで再び発生しました。404 エラー、今回は消えません。

Stop -> Clean... -> Start (404)
Stop -> Clean Tomcat Work Directory... -> Start (404)
Stop -> Clean Tomcat Work Directory... -> Clean... -> Start (404)
Stop -> Remove on the application ->  Clean... -> Run As -> Run on Server -> (404)  
Exit Eclipse, Start Eclipse
Start the server -> (404)

更新 3今回は、起動時にリスナークラスによって引き起こされた例外に気付かなかったことが判明しました。問題を解決した後、それは機能しました。午前3時に仕事をやめるべきだと思います。

4

10 に答える 10

37

Tomcat 6 と Eclipse Ganymede を使用しているときに、次のチェーンが魅力的に機能することがわかりました。

1ストップサーバー

2 プロジェクト -> クリーン

3 プロジェクトのビルド (自動ビルドを無効にしました)

4 サーバーの削除

5 サーバーフォルダを削除

6 Eclipseを再起動します

7 新しいサーバーを作成し、プロジェクトを追加して開始します:)

少し時間がかかりますが、魅力的に機能しました。私の問題はイライラするリスナーの起動の問題でしたが、これは似たようなものであると思われます: tomcat のプロパティです。ところで: 最近は Glassfish の大ファンでもあります。

于 2011-05-21T20:47:58.180 に答える
12

この手順が役立つことがわかりました。

  • [サーバー] タブをクリックし、使用中のサーバーを停止します (実行中の場合)
  • サーバーをもう一度右クリックし、[クリーン... ] を選択します。
  • もう一度右クリックして、[ Tomcat 作業ディレクトリをクリーンアップ... ] を選択します。

ClassNotFoundException がなくなっていることを願っています。

別の機会に、サーバーの起動時に起動されるクラスで問題が発生しました。これは、リスナー クラス (ServletContextListener) の例外です。起動時に ServletContextListener が例外を発生させると、アプリケーションのデプロイが中止されるため、404 エラーが発生します。その場合、例外の原因となった問題を修正すると、アプリケーションが再び機能するようになりました。

編集:この短い手順はほとんどの場合うまくいきましたが、今日はうまくいかず、Micoの拡張手順に従わなければなりませんでした. 私の提案は、同様の問題がある場合は、まずこの短い手順を試してください. 問題が解決しない場合は、Mico's を試してください。

于 2011-05-20T18:56:30.333 に答える
2

Tomcat サーバーを停止してから再起動することをお勧めします。ホット デプロイは永続的に機能するわけではありません。数回の再デプロイ後に再起動が必要になる問題がいくつかあります。

于 2011-05-09T09:31:09.673 に答える
2

+25で受け入れられた回答を見ると、それは本当に正確ですか?

最初にサーバーを削除する場合、それをクリーニングする意味は何ですか? 不必要に時間がかかり、何の役にも立ちません。

だから私はちょうど5、6、7のステップが魔法を行うべきだと言います

5 サーバーフォルダを削除

6 Eclipseを再起動します

7 新しいサーバーを作成し、プロジェクトを追加して開始

于 2013-11-07T07:29:00.013 に答える
1

これは私が2011年の告白で学んだことかもしれません。私にとって、これはクラスローダーの問題のように聞こえます。

背後にある理論:

  • Javaは、クラスのタイプだけでなく、クラスをロードしたクラスローダーを使用して、インスタンスのタイプを識別します。これは、単純な操作が失敗する可能性があることを意味します。

    ClassAa1=新しいa1; ClassA a2 = SomeOtherClass.giveMeInstanceOfA(); a1 = a2;

SomeOtherClassが異なるクラスローダーを使用する場合、Javaはそれらが同じではないと言うため、この例は失敗します。

  • 講演者はまた、一部のサーバーはデフォルトで約45の異なるクラスローダーを使用していると述べました。

これは実際にはどういう意味ですか?

Webアプリをサーバーにデプロイすると、すべてが正常に実行されます。サーバーは、クラスと、それらをどこかにロードするために必要なすべてのものをキャッシュします。ここで、ホットデプロイマンを作成すると、サーバーは新しい(または異なる)クラスローダーを使用して新しいクラスをロードする場合があります。これは、これからメモリ内に同じであるはずの2つの異なるクラスがあるため、危険になり始めるポイントです。キャスト(ClassA a =(ClassA)new ClassA())のような単純な操作は失敗し、クラス内の新しいメソッドが見つかりません(サーバーはこのメソッドなしでキャッシュされたバージョンを取得するため)、...。

これは、サーバーを再起動し、作業ディレクトリをクリーンアップして(キャッシュされたバージョンを削除するため)、ホットデプロイメントを重要なものとして考え始めるポイントです。

Mikkos procedereを試すことが可能であり、これで問題が解決する場合、この説明は理由を理解するのに役立ちます。

私はこれがあなたの問題を解決しないことを知っていますが、おそらく何が起こったのかについてあなたにいくつかのヒントを与えることができます。

于 2011-05-26T06:57:15.393 に答える
1

私はプログラミングに関していくつかの新しい経験を積んでおり、もう Eclipse と Tomcat の組み合わせに飢えているわけではありません。ここでいくつかの方法を使用すると、その組み合わせを使用する必要がなくなります。

まず、併用しないでください!

  • 他の利用可能な IDE を使用することができます。たとえば、IntellijIdea (無料ではありませんが、投資する価値があります) には、Java コードをデバッグするときに、コードをその場で変更して Java ファイルを 1 つずつコンパイルし、それが提案するプロパティがあります。サーバー上で更新したい場合。再起動はほとんど必要ありません (もちろん、失われることもありますが、主に機能します)。

  • Eclipse / IDE 内のサーバーではなく、スタンドアロンの tomcat サーバーを使用します。最初のトリックは、外部サーバーをデバッグする場合にのみ機能し、IDE 内では機能しません。2 番目のヒントがあります。jsp または html コンテンツのみを変更した場合、それらのファイルは unix cp または windows copy コマンドを使用して手動で tomcat の webapp フォルダー内の適切な場所にコピーできます。 、フォルダーの内容 (例: myFolder/*.jsp) は何度でもコピーでき、再起動はまったく必要ありません。webappsフォルダー内のweb.xmlファイルをタッチまたは編集して保存すると、変更が表示され、その後、ブラウザーで表示されているページを更新します。おそらく CTRL+F5 によるハード リフレッシュが最善の方法です。

彼のコメントについて@Verdanに感謝します。

于 2012-08-22T20:37:54.980 に答える
1

Tomcat のホット デプロイについて言えば、実際にさまざまな問題が発生しますが、その中で最も少ないのがメモリ リークであり、アプリケーションを再起動する必要があります。「変更を加えて保存し、ブラウザを更新してすぐに変更を確認する」という迅速なターンアラウンドのために、JRebel を試すことをお勧めします。Tomcat および Eclipse で使用する方法を示す JRebel ハンズオン ラボを見つけることができます。http://www.javapassion.com/rebels/jrebel_basics/

于 2011-05-27T16:29:44.367 に答える
1

Mavenの性質を無効にすることでこれを解決できました(プロジェクトを右クリック>> Maven>> Mavenの性質を無効にします)。次に、再度有効にします(プロジェクトを右クリック>>構成>> mavenプロジェクトに変換)。上記の他のすべてのヒントとトリックを試しましたが、これが最終的に機能したものです.

于 2017-06-02T05:44:28.143 に答える
0

私は同じ問題に遭遇していました-上記のすべてを試しました.すべてのサーバー構成を削除し、新しくダウンロードしたTomcatインスタンスで新しい構成を作成した後でも、サーバーを起動しようとするとEclipseが常にフリーズしました. とにかく、新しいワークスペースに移動し、プロジェクトを再インポートして新しいサーバーを作成するまで、問題は解決しませんでした。私にはEclipseのバグのように思えます...だから、他に何もうまくいかない場合は、これが道です...

于 2012-05-07T08:41:53.133 に答える
0

私は現在同じ問題に苦しんでいますが、ここで言及されていることは何も役に立ちません。とにかく、私は次のことを知りました:

  1. Eclipse でサーバーを停止する
  2. 他の場所で tomcat を実行します (私の場合は xamp ディストリビューション)
  3. 現在実行中のTomcatを停止
  4. EclipseでTomcatを起動

もちろん、コードを変更して再度テストするまでは、すべて問題なく動作します。

于 2013-08-20T09:34:10.650 に答える