14

我的问题是我无法使用 tomcat7-maven-plugin 运行远程调试。我用什么:

  • 马文
  • Tomcat7插件到maven
  • IntelliJ IDEA Ultimate 2016.2.2

Ofc Maven 默认随 IntelliJ 提供。我已经尝试过使用 mvnDebug tomcat7:run 命令,但 intelliJ 无法解析 maven 内置命令行中的 mvnDebug 短语。也不能使用 cmd 命令行,因为我找不到'home'路径,因为 maven 是内置的 intelliJ。也尝试使用 Intelli 配置远程调试,但感到困惑。在“Maven 项目”窗口中也找不到 tomcat7 插件。但我确定它是,因为 tomcat7:run 命令启动 tomcat 容器并且应用程序工作。

4

3 回答 3

27

在 Intellij IDEA 中,在Maven Projects选项卡中,向下挖掘到tomcat7:run目标,然后右键单击并Debug像这样选择:

在此处输入图像描述

在上面,请注意在第 34 行有一个断点HelloServlet.java。现在,只要您点击映射到 servlet 的 URL(在本例中为http://localhost:9090/hello),就会触发断点,如下所示:

在此处输入图像描述

用于测试的代码位于以下存储库中:https ://github.com/javacreed/how-to-run-embedded-tomcat-with-maven

关于无法看到(对不起PluginsMaven Projects我错过了您提到的这一点),请注意这Plugins不是“Maven Projects”中的顶级节点..但将位于从<name>您项目的根 pom.xml 中获取的节点下。根据我自己使用 Intellij 2016.x 的经验以及这个功能非常基本的事实,如果这是 Intellij 中的一个错误,我会感到非常惊讶。我建议这要么是您的 pom.xml 的问题,要么是(颤抖!)用户错误。


更新 -Plugins在中不可见Maven Projects

从 pom.xml (这里),tomcat7 插件位于该build -> pluginManagement -> plugins部分中。本节旨在用于根 pom(正如您所拥有的)以集中插件配置,然后只需提及插件即可由任何子模块继承。但如果不这样做,tomcat7 插件将无法在任何地方使用。因此,您必须在build -> plugins -> plugin某处有一个带有 tomcat7 maven 插件的部分(另请参阅相关问题:Maven:什么是 pluginManagement?

例如以下更改(这里是您的仓库的相应拉取请求):

    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
        </plugin>
    </plugins>

添加到<build>根 pom 的部分,立即导致插件部分以及 tomcat7 目标出现在Maven Projects

在此处输入图像描述

于 2016-11-20T16:24:41.733 回答
14

您可以使用以下命令使用 maven 运行 tomcat:

mvn tomcat7:run

如果要调试,请设置此 Maven 选项:

export MAVEN_OPTS=-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

如果您在 Windows 中,请使用 set 命令:

set MAVEN_OPTS=-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

然后您可以使用 Eclipse 或 Intellij 进行调试。

希望这有帮助。

于 2017-11-28T03:11:36.443 回答
1

这是一个较晚的答案,但我想强调另一个更友好的解决方案,它在@arganzheng 的回答背后使用相同的想法。您实际上可以添加调试选项作为 tomcat maven 插件配置的一部分。生成的 pom 看起来像

<plugins>
   <plugin>
      <groupId>org.apache.tomcat.maven</groupId>
      <artifactId>tomcat7-maven-plugin</artifactId>
      <configuration>
         <systemProperties>
              <MAVEN_OPTS>-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000</MAVEN_OPTS>
         </systemProperties>
      </configuration>
   </plugin>
</plugins>
于 2019-01-25T09:14:01.250 回答