解决Tomcat10.1.26源码导入IDEA2024.1.4问题

323 阅读1分钟
  1. 下载Tomcat10.1.26源码

  2. 使用idea打开项目,需要引入maven。但IDEA 2024.1.4右键项目后找不到添加框架Add Framework Support

    方法一:本来我想通过设置,把Add Framework Support添加到Project View Popup Menu下,但是添加完还是没有,所以通过方法二。

image.png

image.png

方法二:先选中项目,IDEA中菜单Help - Find Action中查找Add Framework Support

image.png

image.png 3. 引入Maven,加入缺失依赖

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.easymock</groupId>
      <artifactId>easymock</artifactId>
      <version>3.5.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.10.1</version>
    </dependency>
    <dependency>
      <groupId>wsdl4j</groupId>
      <artifactId>wsdl4j</artifactId>
      <version>1.6.2</version>
    </dependency>
    <dependency>
      <groupId>javax.xml</groupId>
      <artifactId>jaxrpc</artifactId>
      <version>1.1</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jdt</groupId>
      <artifactId>org.eclipse.jdt.core</artifactId>
      <version>3.38.0</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jdt.core.compiler</groupId>
      <artifactId>ecj</artifactId>
      <version>4.6.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>jakartaee-migration</artifactId>
      <version>1.0.8</version>
    </dependency>
    <dependency>
      <groupId>biz.aQute.bnd</groupId>
      <artifactId>biz.aQute.bndlib</artifactId>
      <version>5.2.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  1. 但仍然提示缺失java.lang.foreign.*,看了下缺失类例如,就搜了下java.lang.foreign.ValueLayout
import java.lang.foreign.Arena;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.ValueLayout;

显示java.lang.foreign.ValueLayout为jdk19后的类。不理解但是还是更新到22了。

image.png

  1. 最后终于找到了Bootstrap的main方法要开始启动了但是一访问,报JasperException错误。

image.png

  • org.apache.jasper.JasperException: java.lang.NullPointerException: Cannot invoke "jakarta.servlet.jsp.JspFactory.releasePageContext(jakarta.servlet.jsp.PageContext)" because "org.apache.jsp.index_jsp._jspxFactory" is null
org.apache.jasper.JasperException: java.lang.NullPointerException: Cannot invoke "jakarta.servlet.jsp.JspFactory.releasePageContext(jakarta.servlet.jsp.PageContext)" because "org.apache.jsp.index_jsp._jspxFactory" is null
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:612)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:488)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:377)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:325)
	jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
  • java.lang.NullPointerException: Cannot invoke "jakarta.servlet.jsp.JspFactory.releasePageContext(jakarta.servlet.jsp.PageContext)" because "org.apache.jsp.index_jsp._jspxFactory" is null
java.lang.NullPointerException: Cannot invoke "jakarta.servlet.jsp.JspFactory.releasePageContext(jakarta.servlet.jsp.PageContext)" because "org.apache.jsp.index_jsp._jspxFactory" is null
	org.apache.jsp.index_jsp._jspService(index_jsp.java:435)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:67)
	jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:456)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:377)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:325)
	jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
**):注意** 主要问题的全部 stack 信息可以在 server logs 里查看
  1. 根据JasperException猜测是缺失tomcat-jasper包,因此添加依赖tomcat-jasper。
<dependency>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>tomcat-jasper</artifactId>
  <version>10.1.26</version>
</dependency>
  1. 启动Tomcat,启动成功。

image.png

总结:

  1. 看官网Tomcat10.1.x对应的java应该就是11及以后就可以了。但是不知道为什么一开始用的17就是不行。但升级到22才解决。 image.png
  2. 没理解这个tomcat-jasper包,没细搜。总之主要目的是先把源码跑起来以后再研究。