使用EclipseWTP将web项目发布到tomcat后缺少类

使用EclipseWTP将web项目发布到tomcat后缺少类,eclipse,tomcat,deployment,eclipse-wtp,Eclipse,Tomcat,Deployment,Eclipse Wtp,我的工作区中有几个动态web项目,每个项目都包含类并引用其他实用程序项目(简单Java项目)和第三方JAR 这些应用程序(动态web项目)使用EclipseWTP(Helios3.6)部署在TomcatV6.0.6上 当我更新我的工作区并从SVN存储库中提取新的类/资源/JAR时,我会在tomcat apps中重新发布我的应用,然后重新启动它 有时候,当tomcat启动我的一个应用程序时,它会抛出ClassNotFoundException,或者抱怨其他缺少的资源。有时,我看到部署的资源(例如S

我的工作区中有几个动态web项目,每个项目都包含类并引用其他实用程序项目(简单Java项目)和第三方JAR

这些应用程序(动态web项目)使用EclipseWTP(Helios3.6)部署在TomcatV6.0.6上

当我更新我的工作区并从SVN存储库中提取新的类/资源/JAR时,我会在tomcat apps中重新发布我的应用,然后重新启动它

有时候,当tomcat启动我的一个应用程序时,它会抛出ClassNotFoundException,或者抱怨其他缺少的资源。有时,我看到部署的资源(例如SpringbeansXML)不是最新的,并且包含“旧”内容

我常用的反伏都教黑魔法治疗方法: *停止/启动tomcat *清除(右键单击服务器配置时) *清理tomcat工作目录 *从tomcat中删除所有应用程序,清除,重新启动tomcat,添加所有应用程序

我需要运行这个“过程”几次,直到问题解决

你们这些家伙也有这种病吗?这是已知的bug吗? 有什么建议可以解决吗?使用JAR而不是公用事业项目是否可以解决/减少这些问题

我会考虑使用嵌入式码头,我只是想避免在生产环境中运行码头的专有脚本。
--Yonatan

有趣的行为。。。。由于权限问题,在我的Linux机器上也发生了类似的事情


无论如何,我建议不要使用WTP。尝试使用ant构建脚本。它很简单,对我来说效果很好。

它经常发生在我身上。我不认为那是巫毒。我认为当您在后台更改内容(例如maven构建)时,EclipseWTP不能很好地工作

我要做的是避免完全使用它。相反,我使用Maven WAR插件来部署应用程序:

mvn war:inplace tomcat:inplace -DskipTests=true
mvn tomcat:undeploy
这工作非常快,因为它不需要组装和打包战争

然后,要取消部署应用程序,请执行以下操作:

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
#/垃圾箱/垃圾箱
如果[-f$CATALINA_PID];然后
echo“tomcat已经在用pid运行”`cat$CATALINA\u pid`
出口1
fi
java-Dmy.arg=val-Dcatalina.home=-Dlog4j.configuration=file:///log4j.xml -classpath/bootstrap.jar:/usr/lib/jvm/java-6-sun-1.6.0.20/lib/tools.jar org.apache.catalina.startup.bootstrap start&
echo$!>$卡塔琳娜
mvn war:inplace tomcat:inplace-DskipTests=true
取消部署并停止tomcat:

#!/bin/sh

mvn tomcat:undeploy

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

rm $CATALINA_PID
#/垃圾箱/垃圾箱
mvn tomcat:取消部署
/shutdown.sh-force
rm$CATALINA_PID
其他构建脚本可能也是如此——这只是需要编写多少代码的问题

我选择了马文的战争:原地目标是因为它做得很少,所以跑得很快。请参见此处:

顺便说一句,ANT和Gradle有一个war任务/插件,可以配置为做类似的事情(我真的不记得了…)


希望这能有所帮助。

自从Eclipse问世以来,这些问题一直存在。到达这里是因为atm my web.xml不再部署。特别是与m2eclipse结合使用时,当您尝试启动Tomcat时,您永远不会知道会发生什么。我所知道的与Eclipse一起工作的每个人都有这些问题,我不明白为什么这些问题没有得到解决……不幸的是,作为一名承包商,我无法选择我的IDE或容器,也无法选择发布的方式,所以大多数时间我都在使用WTP。

似乎在解决这个问题方面正在取得进展


希望它能在Eclipse的下一版本中得到修复。

另一件需要注意的事情是应该启用
Project->buildautomatically
,并且项目不应该有任何构建路径问题

打开navigator视图并确认生成文件夹已生成
class
文件


如果文件未生成,则不会发布。虽然这看起来很明显,但很容易过度查看,浪费了我很多时间。

一个可能的解决方案可能是没有创建您的bin文件夹。检查您是否没有删除build/bin文件夹,并且它确实存在于您的工作空间中。

我遇到了类似的问题。当我发布一个web应用程序时,Eclipse没有包含一个jar,因此通过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>


这也发生在我身上。同样的伏都教也适用。不幸的是,我唯一的解决方案是不使用eclipse/WTpon。当这个问题发生在我身上时,我注意到的一件事是,我忽略了eclipse项目中的build文件夹(使用Properties->Resource->Resource过滤器),将该文件夹添加回everything is fine..eran-这是否意味着我需要使用maven来管理所有依赖项?或者我可以只在战争中使用它吗?Yonatan,maven在这里不是必须的。因为我无论如何都使用maven,所以它对我来说是最简单的解决方案。您可以对任何其他构建脚本执行相同的操作—这只是您需要编写多少代码的问题。我选择了马文的战争:原地目标是因为它做得很少,所以跑得很快。请参见此处:。顺便说一句,ANT和Gradle有一个war任务/插件,可以配置为做类似的事情(我真的不记得了…)。Yonatan,我的回答中有什么遗漏吗?我根本没有使用maven,我也有同样的问题。即使资源在eclipse中发生了变化,该错误在3.4.2中已经修复,但我仍然在4.2ATS WTP 3.4.2中看到问题,而不是在eclipse 3.4.2中。WTP 3.4.2尚未包含在Eclipse AFAIK的任何标准发行版中;这显然是预定的