我的问题是我无法使用tomcat7-maven-plugin运行远程调试。 我用的是什么:
Ofc Maven默认提供IntelliJ。我已经试过了 mvnDebug tomcat7:运行命令但是intelliJ并没有解决maven的内置命令行中的mvnDebug短语。不能使用cmd命令行,因为我无法找到“家”。路径,因为maven是内置的intelliJ。尝试使用intelli配置远程调试,但感到困惑。 也无法在" Maven Projects"中找到tomcat7插件。窗口。但是我确定它是,因为tomcat7:run命令启动tomcat容器和app工作。
答案 0 :(得分:23)
在Intellij IDEA中,在Maven Projects
标签中,深入查看tomcat7:run
目标,然后右键单击并选择Debug
,如下所示:
在abouve中,请注意HelloServlet.java
第34行有一个断点。现在,只要您点击映射到servlet的URL(在这种情况下为http://localhost:9090/hello),断点就会被点击,如下所示:
用于测试此代码的代码位于以下存储库:https://github.com/javacreed/how-to-run-embedded-tomcat-with-maven
由于无法在Plugins
中看到Maven Projects
(抱歉,我错过了您已经提到过这一点),请注意Plugins
不是'Maven Projects'中的顶级节点..但将位于从项目的根pom的<name>
中取名的节点下。基于我自己对Intellij 2016.x的经验以及这个功能非常基本的事实,如果这是Intellij中的一个错误,我会感到非常惊讶。我建议这是你的pom.xml的问题或(颤抖!)用户错误。
Plugins
在Maven Projects
从pom.xml(here)开始,tomcat7插件位于build -> pluginManagement -> plugins
部分。本节旨在用于根pom(如你所示)集中插件配置,然后只需提及插件即可由任何子模块继承。但是如果不这样做,tomcat7插件将无法在任何地方使用。因此,您必须在某处拥有tomcat7 maven插件的build -> plugins -> plugin
部分(另请参阅相关问题:Maven: What is pluginManagement?)
例如,以下更改(here是您的回购的相应拉取请求):
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
</plugin>
</plugins>
添加到根pom的<build>
部分,立即导致插件部分以及tomcat7目标出现在Maven Projects
中:
答案 1 :(得分:7)
您可以使用此命令运行带有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进行调试。
希望这有帮助。
答案 2 :(得分:0)
这是一个较晚的答案,但我想强调另一种更为行家友好的解决方案,该解决方案在@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>