9

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

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

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

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

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

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

你们是否也深受其害?这是一个已知的错误 ?任何建议如何解决它?使用 jars 而不是实用程序项目会解决/减少这个问题吗?

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

——约纳坦

4

7 回答 7

3

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

我要解决这个问题是完全避免使用它。相反,我使用 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 的 war:inplace 目标是因为它做的很少,因此运行得非常快。请参见此处: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

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

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

如果文件没有被构建,它们将不会被发布。虽然这看起来很明显,但很容易被忽略并浪费了我很多时间。

于 2014-02-25T06:58:05.147 回答
1

我有一个类似的问题。当我发布一个 Web 应用程序时,Eclipse 不包括其中一个 jar,因此通过 Eclipse 发布到服务器失败。我通过修改项目的 .classpath 文件来纠正这个问题,以纠正依赖关系,如下所示。确保它与其他 jars 配置同步。

<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 回答
1

自从Eclipse问世以来一直在使用它,这些问题一直存在。到达这里是因为 atm 我的 web.xml 不再部署。尤其是与 m2eclipse 结合使用时,您永远不会知道尝试启动 Tomcat 时会发生什么。我知道如何使用 Eclipse 的每个人都有这些问题,我不明白为什么它们没有得到修复......不幸的是,作为承包商工作意味着我无法选择我的 IDE 或容器或完成发布的方式,所以大部分时间我都坚持使用 WTP。

于 2011-01-06T16:43:21.820 回答
0

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

于 2015-01-08T09:24:40.197 回答
0

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

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

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

于 2012-03-28T12:16:14.897 回答