【问题标题】:Eclipse Mars - Web Application - Tomcat - Maven - Deploy and DebugEclipse Mars - Web 应用程序 - Tomcat - Maven - 部署和调试
【发布时间】:2016-03-02 12:28:20
【问题描述】:

是否有一种万无一失的简单方法可以在 Eclipse Mars 的本地 apache tomacat 服务器中运行和调试简单(教程级别)Maven Web 应用程序?

我正在开发一个网络应用程序,我有时可以运行它,有时不能运行它,我有时可以调试它,有时不能。有点郁闷。

我目前的偏好是从具有目标tomcat:run 的 Maven 配置运行项目。它总是构建和运行,但它不会调试,即如果我在我的 Java 代码中的 servlet 代码中放置一个断点,它就不会到达。 (有时在我第一次运行项目时会到达,但后来它无法找到某个文件的源代码,并且在后续运行时停止中断......)

我也尝试过“在服务器上调试”配置,但在这种情况下,我必须在运行项目之前运行 Maven 安装,否则将找不到某些类。这也停止了工作。它只是无法从 src 中找到一些类,尽管 Web 部署程序集配置已将源部署到 WEB-INF/classes 中。

【问题讨论】:

  • 请不要在不评论原因的情况下对问题投反对票
  • 原因可能与 Spring 注入了一些依赖项有关,因此代码中没有对某些类的显式引用。也许正因为如此,这些类并没有被eclipse部署......
  • 另一个“发现”是,如果我从头开始,删除 .metadata 文件夹,并且我不运行 Maven 清理或安装,“在服务器上运行”和“在服务器上调试”都可以.运行 Maven 后,这些停止工作,因为他们无法从 src 文件夹中找到类

标签: eclipse maven debugging tomcat jakarta-ee


【解决方案1】:

(您可能被否决了,因为有几个问题归为一个问题。我会尽力回答所有问题,因为我对您的痛苦太熟悉了)

Eclipse 的 maven 集成在调试 web 应用程序时是出了名的不稳定,即使是 MARS。您确实可以将 tomcat6:run 或 tomcat7:run 用于 webapps。以下是一些让我保持清醒的“最佳实践”:

  • 始终将“干净”作为目标的一部分。
  • 确保遵循标准的 maven WAR 项目布局。您可以打破这一点,但必须小心指定 META-INF 等的所有覆盖路径。
  • 当您在 Eclipse 中停止/终止该进程时,您通常会发现该进程实际上仍在继续运行,但已将其作为父进程从 eclipse.exe 中分离出来。您需要手动终止 java.exe 进程,否则您会发现“端口已在使用”错误。 ProcessExplorer 对于密切关注这一点非常有用。
  • 当您遇到断点并显示“未找到源”时,您可以尝试一些方法。
    • 在 window-preferences - maven/installations 下添加您的 maven 安装。将此设置为默认值。
    • 在您的运行配置中,确保您使用的是系统安装而不是嵌入式安装。
    • 当您遇到断点时,关闭编辑器,然后通过单击调试树中的点重新打开它。

【讨论】:

  • 谢谢,为了解决“找不到源”的问题,我切换到了外部 Maven 安装而不是嵌入式安装,并且成功了!
【解决方案2】:

因此,您尝试在 Eclipse 中调试目标为“tomcat:run”的 maven 项目,并且应用程序在设置的断点处中断,但您收到“找不到源”错误。

按照以下步骤解决此问题:

  1. 转到您的调试配置
  2. 在“主要”选项卡中,确保选中“解决工作区工件”
  3. 确保将 Base Directory 设置为您的 maven 项目
  4. 在“源”选项卡中,确保您已将项目添加为“Java 项目”或“工作区”或“项目”

第 4 步很重要,添加 -> Java Project/Project 并选择您的项目

【讨论】:

    猜你喜欢
    • 2012-08-12
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2016-06-02
    • 2012-08-22
    相关资源
    最近更新 更多