我正在使用Eclipse和Tomcat来处理webapp。我使用Eclipse将我的代码更改自动部署到Tomcat。它适用于Java类:当我对.java文件进行更改时,我可以看到它立即反映在Web应用程序上,而无需重新启动Tomcat(只要它在调试模式下运行)。
但是使用JS文件,我必须停止Tomcat,浏览Tomcat的“添加和删除”菜单,删除我的WAR文件,单击确定,添加它们并再次单击确定并重新启动Tomcat以查看更改。简单的重启或清理不会解决问题。我真的需要删除项目并再次添加它们。
更糟糕的是它曾经工作过。你对这可能导致什么有什么想法吗?
这是我的Tomcat配置:
你知道有什么不对吗?我可以提供更多信息吗?
===编辑===
我检查了Eclipse为Tomcat复制资源的地方,看来JS文件已更新。因此,这意味着Eclipse正确地将资源复制到目标。 Tomcat没有选择更改。
===另一个编辑===
我们的应用程序中有一个内部缓存。我将其停用并清除它,但它没有解决问题。它不太可能来自那里。
另外,既然我有这个问题,我已经看过两次Tomcat接收我的更改了,但只有当我很长一段时间回到应用程序后...
===一些新信息===
似乎Tomcat终于接受了改变......但仅在10分钟之后。
===这不是Eclipse问题===
现在很清楚这不是Eclipse问题:我使用与Eclipse相同的参数从命令行启动Tomcat。
这是我使用的命令行:
/home/antoine/opt/java/jdk1.8.0_25/bin/java -Dcatalina.base=/home/antoine/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0 -Dcatalina.home=/home/antoine/opt/java/apache-tomcat-8.0.15 -Dwtp.deploy=/home/antoine/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps -Djava.endorsed.dirs=/home/antoine/opt/java/apache-tomcat-8.0.15/endorsed -Djavax.net.ssl.trustStorePassword=somepassword -Djavax.net.ssl.trustStore=/home/antoine/opt/java/apache-tomcat-8.0.15/my.keystore -Xms512m -Xmx1024m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8 -classpath /home/antoine/opt/java/apache-tomcat-8.0.15/bin/bootstrap.jar:/home/antoine/opt/java/apache-tomcat-8.0.15/bin/tomcat-juli.jar:/home/antoine/opt/java/jdk1.8.0_25/lib/tools.jar org.apache.catalina.startup.Bootstrap start
答案 0 :(得分:0)
Antoine,需要编译java类,并且服务器知道编译的.class何时发生更改,因为文件已更改。
对于js,html或css文件,您可以将它放在资源文件夹中的项目中,只需保存它并在浏览器中刷新即可查看结果。通常,浏览器会在缓存中保存一些数据,您需要在进行刷新之前清理缓存并查看结果。
如果清理浏览器缓存不起作用,请尝试在firefox中使用firebug(例如)来调试js代码并检查资源文件夹中的文件位置。可能你正在使用旧版本或类似的想法。
您可以在tomcat服务器(Servers视图)中单击两次打开Tomcat Overview页面。在选项卡发布中,选择了“资源更改时自动发布”选项。
答案 1 :(得分:0)
重新加载浏览器缓存Ctrl+F5
。 Firefox,Chrome会发生什么?
答案 2 :(得分:0)
嗯,实际上我在Tomcat服务器前面有一个nginx。我最近更改了配置文件的原因不同。但新版本包含缓存。因此问题。
在某些时候,我已经证明问题不是来自Eclipse,也不是来自我们的应用程序,我已经审查过Tomcat配置并重新安装它。它必然是nginx。
什么让它离开的是我发现我的JS文件没有修改HTTP状态304。这意味着一些Web服务器决定回答这个问题。如果那不是Tomcat,那么......