问题

debug时,到了tomcat的源码就进不去,只能看到变量,看不到类。关于servlet部分的配置如下

pom.xml
<dependency>
   <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>

分析

tomct源码在groupid为org.apache.*的依赖中,org.apache.*部分的依赖没配置,所以maven不会下载源码。
基于此,大胆推测,如果将tomcat依赖配置在pom.xml中,maven肯定会下载源码。
所以pom.xml中添加tomcat依赖,并且scope是provided,重启intellij idea,果然work了。

<dependency>
     <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-catalina</artifactId>
      <version>8.5.28</version>
      <scope>provided</scope>
  </dependency>

intellij idea debug到了tomcat代码就进不去_apache

后续,居然又不work了

因为maven工程中,用了parent-child模式,在parent工程pom.xml的dependencymanagement定义了

<dependency>
     <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-catalina</artifactId>
      <version>8.5.28</version>
      <scope>provided</scope>
  </dependency>

child工程定义了groupid、artifactid

<dependency>
     <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-catalina</artifactId>
  </dependency>

但是不work!没办法只好又加了scope,又work了,怀疑是intellij idea的bug

<dependency>
     <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-catalina</artifactId>
      <scope>provided</scope>
  </dependency>

想了想,如有可能使用内嵌式tomcat也不错,debug tomcat源码方便,再一个不用重复安装tomcat。

最终建议

最终还是建议使用嵌入式Tomcat,既方便调试,也免去安装Tomcat的烦恼,同时还统一了Tomcat版本。

参考

cant step into app server source codeDebugging application server and application itself

公众号