9

ワークスペースにいくつかの動的Webプロジェクトがあり、それぞれにクラスが含まれており、他のユーティリティプロジェクト(単純なJavaプロジェクト)とサードパーティのjarを参照しています。

これらのアプリ(動的Webプロジェクト)は、Eclipse WTP(Helios 3.6)を使用してTomcatv6.0.6にデプロイされます。

ワークスペースを更新し、新しいクラス/リソース/ jarがSVNリポジトリから抽出されたら、Tomcatアプリでアプリを再公開し、再起動します。

ときどき、tomcatが私のアプリの1つを起動すると、ClassNotFoundExceptionがスローされたり、他の不足しているリソースについて文句を言ったりします。デプロイされたリソース(たとえば、spring Beans xml)が最新ではなく、「古い」コンテンツが含まれていることがあります。

私が使用する一般的なanti-voodoo-black-magic処理:* tomcatの停止/開始*クリーン(サーバー構成を右クリックした場合)*tomcat作業ディレクトリのクリーンアップ*tomcatからすべてのアプリを削除し、tomcatをクリーンアップし、再起動し、すべてのアプリを追加します

問題が解決するまで、この「手順」を数回実行する必要があります。

あなたたちもそれに苦しんでいますか?これは既知のバグですか?それに取り組む方法の提案はありますか?ユーティリティプロジェクトの代わりにjarを使用すると、この問題が解決/軽減されますか?

代わりにEmbeddedJettyの使用を検討しますが、「本番」環境でJettyを実行するための独自のスクリプトは避けたいだけです。

-ヨナタン

4

7 に答える 7

3

それは私にたくさん起こりました。私はそれをブードゥーとは呼びません。バックグラウンドで何かを変更すると(Mavenビルドなど)、EclipseWTPはうまく機能しないと思います。

これを解決するために私がすることは、それを完全に使用しないようにすることです。代わりに、MavenWARプラグインを使用してアプリケーションをデプロイします。

mvn war:inplace tomcat:inplace -DskipTests=true

これは、戦争を組み立ててパッケージ化する必要がないため、非常に高速に機能します。

次に、アプリケーションをアンデプロイします。

mvn tomcat:undeploy

私は次のようなスクリプトを持っています

  • tomactをデプロイして開始します
  • Tomcatをアンデプロイして停止します

これは次のようになります。

Tomcatを起動し、アプリをデプロイします。

#!/bin/sh

if [ -f $CATALINA_PID ]; then
  echo "tomcat already running with pid " `cat $CATALINA_PID`
  exit 1
fi

java -Dmy.arg=val -Dcatalina.home=<catalina-home> -Dlog4j.configuration=file:///log4j.xml -classpath <path-to-tomcat-lib>/bootstrap.jar:/usr/lib/jvm/java-6-sun-1.6.0.20/lib/tools.jar org.apache.catalina.startup.Bootstrap start &

echo $! > $CATALINA_PID

mvn war:inplace tomcat:inplace -DskipTests=true

Tomcatをアンデプロイして停止します。

#!/bin/sh

mvn tomcat:undeploy

<path-to-tomcat>/shutdown.sh -force

rm $CATALINA_PID

おそらく他のビルドスクリプトでも同じです-それはあなたが書かなければならないコードの量の問題です。

私はMavenの戦争を選びました。インプレースの目標は、ほとんど何もしないため、非常に高速に実行されるためです。ここを参照してください:maven.apache.org/plugins/maven-war-plugin/usage.html

ところで、ANTとGradleには戦争タスク/プラグインがあり、おそらく同様のことを行うように構成できます(私は本当に覚えていません...)

お役に立てれば。

于 2010-12-03T13:49:06.583 に答える
1

興味深い振る舞い....パーミッションの問題が原因で、私のLinuxマシンでも同様のことが起こっていました。

とにかく、私はWTPを使用しないことをお勧めします。代わりにantビルドスクリプトを試してください。そのシンプルで私にとっては素晴らしい働きをします。

于 2010-12-02T17:45:38.757 に答える
1

Eclipseがリリースされてから作業を続けてきましたが、これらの問題は常に存在していました。atm my web.xmlがデプロイされなくなったため、ここに到着しました。特にm2eclipseと組み合わせると、Tomcatを起動しようとしたときに何が起こるかわかりません。Eclipseでどのように機能したかを知っている人は誰でもこれらの問題を抱えていますが、なぜそれらが修正されないのかわかりません...そして残念ながら請負業者として働いているということは、IDEやコンテナ、または公開の方法を選択できないことを意味します、そのため、ほとんどの場合、私はWTPで立ち往生しています。

于 2011-01-06T16:43:21.820 に答える
1

注意すべきもう1つの点は、Project -> Build Automatically有効にする必要があり、プロジェクトにビルドパスの問題がないことです。

ナビゲータービューを開き、ビルドフォルダーにclassファイルが生成されていることを確認します。

ファイルがビルドされていない場合、それらは公開されません。これは明らかなようですが、見落としがちで、多くの時間を無駄にしました。

于 2014-02-25T06:58:05.147 に答える
1

私も同様の問題を抱えていました。Webアプリケーションを公開したとき、Eclipseにはjarの1つが含まれていなかったため、Eclipseを介して切断するための公開が失敗しました。プロジェクトの.classpathファイルを変更して、依存関係を次のように修正することで、これを修正しました。他のjar設定と同期していることを確認します。

<classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.17/log4j-1.2.17.jar" sourcepath="M2_REPO/log4j/log4j/1.2.17/log4j-1.2.17-sources.jar">
            <attributes>
            <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
        </attributes>
        </classpathentry>
于 2015-02-20T22:36:52.903 に答える
0

この問題の解決は進んでいるようです。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=365748

うまくいけば、Eclipseの次のリリースで修正されるでしょう。

于 2012-03-28T12:16:14.897 に答える
0

考えられる解決策の1つは、binフォルダーが作成されていないことです。build / binフォルダーが削除されておらず、ワークスペースに存在することを確認してください。

于 2015-01-08T09:24:40.197 に答える