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

时间:2010-12-02 14:31:14

标签: eclipse tomcat deployment eclipse-wtp

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

使用eclipse WTP(Helios 3.6)在tomcat v6.0.6上部署这些应用程序(动态Web项目)

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

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

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

我需要多次运行这个'程序',直到问题解决。

你们也受苦了吗?这是一个已知的错误 ? 有任何建议如何解决它?使用jar而不是实用项目会解决/减少这个问题吗?

我会考虑使用Embedded Jetty,我只想避免在“生产”环境中运行Jetty的专有脚本。

- Yonatan

7 个答案:

答案 0 :(得分:3)

这件事发生在我身上。我不会称之为Voodoo。我认为Eclipse WTP在后台更改内容时效果不佳(例如maven构建)。

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

mvn war:inplace tomcat:inplace -DskipTests=true

这非常快,因为它不需要组装,并打包战争。

然后取消部署应用程序:

mvn tomcat:undeploy

我有

的脚本
  • 部署并启动tomact
  • 取消部署并停止tomcat

它看起来像这样:

启动tomcat并部署app:

#!/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的战争:inplace目标是因为它做得很少,因此运行得非常快。见这里:maven.apache.org/plugins/maven-war-plugin/usage.html

BTW,ANT和Gradle都有一个战争任务/插件,它可能被配置为做类似的事情(我真的不记得......)

希望这有帮助。

答案 1 :(得分:1)

有趣的行为......由于许可问题,我的Linux机器上发生了类似的事情。

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

答案 2 :(得分:1)

答案 3 :(得分:1)

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

打开导航器视图并确认构建文件夹已生成class个文件。

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

答案 4 :(得分:1)

我有类似的问题。当我发布一个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>

答案 5 :(得分:0)

似乎在解决这个问题上取得了进展。

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

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

答案 6 :(得分:0)

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