【问题标题】:Tomcat not deploying new version of files at all - linux / eclipseTomcat根本没有部署新版本的文件 - linux / eclipse
【发布时间】:2015-06-12 21:21:09
【问题描述】:

我对 tomcat 将我的文件部署到服务器的方式有疑问。

我已将Tomcat 7 安装到/opt/tomcat7

在我的 Eclipse 中,我已将此路径指定为我的 tomcat 服务器。

我的工作区目录是/home/maciej/workspace/<projects here>

现在如果我编辑一个类文件并添加简单的日志语句

log.info("blabla"); 然后部署 'NEW' 版本的文件通过 - 在服务器上运行,我在我的输出中看不到这个 'blabla'。似乎虽然我修改了类文件,但它没有正确部署到 tomcat 中。 Tomcat 正在读取天知道但肯定不是它应该读取的文件。

编辑:我已经在 Eclipse 中重新配置了我的 tomcat,现在:

Server Path = /opt/tomcat7
Deploy Path = /opt/tomcat7/webapps <- used to be .metadata/blablabla default 
                                      eclipse tomcat location

当我在参数/工作目录下打开“打开午餐配置”时,默认选项是带有灰色路径 /home/maciej/Desktop 的票证

这也应该改变吗?

不是tomcat工作目录/opt/tomcat7/work吗?

有什么建议/想法吗?由于这个问题让我有点紧张,因为我无法开发应用程序。

【问题讨论】:

    标签: linux eclipse tomcat


    【解决方案1】:

    Server Path 与您在Window > Preferences > Server > Runtime Environments 在点击Edit 后看到的模态中的Tomcat installation directory 相同。这应该设置为 /opt/tomcat7 或 Tomcat 安装的根目录所在的任何位置。

    Deploy Path 相对于Server Path。它应该是webapps,除非你已经有东西了并且你想要一个单独的目录。在您关闭 Tomcat 并通过 Servers 视图删除它下面的所有 web 应用程序之前,您将无法对其进行编辑。

    如果您信任 JDK 热交换,请尝试取消选中 Modules auto reload by default,如果您使用 JDK 1.7 或 1.8 并且只想查看插入的日志语句,则应该这样做。

    您提到的工作目录只是 Tomcat 用于在崩溃等情况下吐出线程转储的根目录。它与 Tomcat 的“工作”目录无关。

    【讨论】:

      【解决方案2】:

      打开服务器视图:窗口->显示视图->其他->服务器。选择正确的服务器,右击,选择“清理”然后重启tomcat。它应该会有所帮助。

      【讨论】:

      • 好的,它在一定程度上解决了这个问题。但似乎每次我想重新部署我的应用程序时都必须执行此过程,而这是不希望的。为什么重新部署tomcat时不会自行清理?我的 windows 机器没有这个问题,但我的 linux 有。
      • 检查该服务器的配置。双击后出现。
      • 好的,所以我更改了配置,所以现在我完全使用我的 tomcat 来部署 webapp。所以我将部署路径设置为 /opt/tomcat7/webapps 并将服务器路径设置为 /opt/tomcat7.... 然而 tomcat 仍然没有将新版本的文件部署到 webapps
      【解决方案3】:

      如果您更改项目中的某些内容,Eclipse 将自动构建并将文件“部署”到您指定的位置。默认情况下,Eclipe 的工作就到此为止,剩下的就交给 tomcat 了。

      Tomcat 与任何 Java Web 服务器一样,会检测 JSP 中的更改并重新编译它们。然而,由于 Java 类加载的工作方式,类的更改没有任何影响。要让 tomcat 使用新版本的类,您需要:

      1. 之前没有加载过该类。例如,您启动了 tomcat,但在执行任何请求之前看到了一个错误。如果您更改类,则将使用该更改,因为该类尚未加载。
      2. 重新加载应用程序。这意味着所有类都被丢弃,一切重新开始。

      默认情况下,重新加载应用程序的最简单方法是更改​​web.xml。如果你查看 tomcat 的配置 conf/context.xml 你可以看到 WEB-INF/web.xml 被监控。任何更改都会触发上下文的重新加载。因此,您可以对文件进行人为更改,也可以添加 WEB-INF/version.properties 之类的资源,并使用任何构建生成不同的 version.properties

      无论如何,重新加载复杂的应用程序都需要时间。这就是为什么有像 JRebel 这样的插件的原因。但是在你走这条路之前(这会在你的设置中添加另一个移动部分),你也可以尝试使用 Ecipe 对热代码替换的支持。您在调试中启动 tomcat,使用 Eclipse 连接到它,然后更改一些类。 Eclipse 将尝试重新编译该类并将新定义上传到 tomcat。如果它失败了,它会告诉你。一般来说,当你改变程序的结构时它会失败,而当你只是改变方法的实现时它会成功。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-08
        • 1970-01-01
        • 2011-04-22
        • 2019-03-01
        • 1970-01-01
        • 2012-06-09
        • 2015-01-06
        • 1970-01-01
        相关资源
        最近更新 更多