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

标签 eclipse tomcat deployment eclipse-wtp

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

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

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

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

我常用的anti-voodoo-black-magic 治疗: * 停止/启动tomcat * 清理(当右键单击服务器配置时) * 清理tomcat工作目录 * 从tomcat中删除所有应用,清理,重启tomcat,添加所有应用

我需要多次运行此“程序”,直到问题得到解决。

你们也有这样的困扰吗?这是一个已知的错误 ? 有什么建议如何解决吗?使用 jars 而不是实用程序项目将解决/减少这个问题?

我会考虑改用嵌入式 Jetty,我只是想避免使用专有脚本在“生产”环境中运行 Jetty。

-- 与纳丹

最佳答案

这在我身上发生过很多次。我不会称之为巫毒教。我认为当您在后台更改内容(例如 Maven 构建)时,Eclipse WTP 无法正常工作。

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

mvn war:inplace tomcat:inplace -DskipTests=true

这工作起来非常快,因为它不需要组装和打包 war。

然后取消部署应用程序:

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

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

希望这对您有所帮助。

关于eclipse - 使用eclipse wtp将web项目发布到tomcat后缺少类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4336069/

相关文章:

java - 图像数组在下拉菜单中超出范围

java - Eclipse - 添加 module-info.java 时找不到模块

linux - 在不重启 tomcat 的情况下截断 catalina.out

java - 如何为 request.getHeader ("remote_user"配置 Tomcat)?

css - 部署更改 CSS 字体值

java - 有什么方法可以防止 Mock 实现出现 "resource"警告吗?

c++ - Eclipse 作为 Linux 和 Windows 上的 C++ 代码的跨平台 IDE

python - Tomcat 错误日志的正则表达式

jquery - 捆绑执行 rake Assets :precompile fails with `unexpected token`

java - 如何制作不会静默失败的可运行 Jar 程序?