2010-12-02 32 views
9

我在工作区中有几个动态web项目,每个都包含类并引用其他实用程序项目(简单Java项目)和第三方jar。使用eclipse wtp将web项目发布到tomcat后丢失的类

这些应用程序(动态Web项目)部署在使用eclipse WTP(赫利俄斯3.6)

当我更新我的工作区和新的类/资源/罐从SVN仓库提取,我重新tomcat的v6.0.6 - 在tomcat应用程序中发布我的应用程序,然后重新启动它。

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

共同抗巫术黑魔法处理我用: *停止/启动tomcat *干净(当服务器配置右键) *清洁Tomcat的工作目录 *删除tomcat的所有应用程序,干净,重新启动tomcat,添加所有应用程序

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

你们也受苦吗?这是一个已知的错误 ? 有什么建议如何解决它?是用jar而不是实用工程来解决/减少这个问题?

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

- Yonatan

+0

这也发生在我身上。同样的伏都教适用。我唯一的解决方案是不幸地不使用eclipse/wtp – Ran 2010-12-02 19:34:56

+0

我也是......... – mjaggard 2013-05-02 10:44:15

+0

当我遇到这个问题时,我注意到的一件事是当我忽略eclipse项目中的构建文件夹时(使用属性 - >资源 - >资源过滤器),添加文件夹的一切都很好.. – Chandu 2016-09-27 13:22:48

回答

3

它发生在我身上很多。我不会称之为巫毒。我认为Eclipse WTP在后台更改内容时效果不佳(例如Maven构建)。

我做什么来解决这个问题是为了避免完全使用它。相反,我使用Maven WAR插件来部署应用程序:

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

BTW,ANT和摇篮有战争任务/插件,它大概可以配置做同样的事情(我真的不记得...)

希望这有助于。

+0

eran-是否意味着我需要使用maven来管理我所有的依赖?或者我可以仅将它用于战争部署? – 2010-12-04 06:33:52

1

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

无论如何,我建议不要使用WTP。尝试使用ant构建脚本。它简单,对我来说它的工作非常出色。

1

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

1

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

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

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

0

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

1

我有一个类似的问题。当我发布一个Web应用程序时,Eclipse没有包含jar中的一个,因此通过Eclipse进行发布会导致失败。我通过修改项目的.classpath文件来纠正这个问题,从而纠正如下的依赖关系。确保它与其他罐子配置同步。

<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> 
相关问题