【maven】记第一次使用maven创建web工程遇到的坑

【开发IDE】

InteIliJ IDEA 2019.3.3 (Ultimate Edition)

JDK 13.0.2

Apache Maven 3.6.3

【问题小结】

#-> 问题1  右键无法新建Servlet文件模板

#-> 问题2  compile环境下的JDK版本问题

#-> 问题3  tomcat插件版本问题导致运行报错Compilation error


下面是详细的过程记录

创建新工程 File->New->Project->Maven,这里选择基于maven自带的骨架web-app创建一个web工程,注意要勾选Create from archetype”,才能选择下面的骨架类型。

【maven】记第一次使用maven创建web工程遇到的坑_第1张图片

【maven】记第一次使用maven创建web工程遇到的坑_第2张图片

工程创建完毕后,目录结构如图所示。

【maven】记第一次使用maven创建web工程遇到的坑_第3张图片

标准的web目录相比还缺少了一些文件夹,手动补齐main/javamain/resources

依次  main->New->Directory,会自动提示【java】和【resources】,直接双击即可

【maven】记第一次使用maven创建web工程遇到的坑_第4张图片

补充完后的目录结构如下:

【maven】记第一次使用maven创建web工程遇到的坑_第5张图片

在【java】目录下新建一个package【com.yy.servlet】,然后在这个包下新建一个servlet叫MyServlet.java


问题1 右键新建的时候会发现找不到Servlet这个文件模板,当然你可以直接新建一个Java Class然后自己继承HTTPServlet,但考虑开发效率,我们一般还是会通过模板直接创建更高效。

【maven】记第一次使用maven创建web工程遇到的坑_第6张图片

解决方法有以下两种。

#1-> 指定java为Source Roots

依次【File】->【Project Structure】->【Modules】->【Web】->【Source Roots】

指定 E:\IdeaProjects\mavenTest\src\main\javaSource Roots 点击OK,保存退出即可。

【maven】记第一次使用maven创建web工程遇到的坑_第7张图片

#2-> pom.xml添加servlet.jar

出现这个问题的原因是现在这个工程是通过maven直接创建的,什么jar包都没有依赖,工程无法识别servlet,所以直接在【pom.xml】 里添加servlet的jar包就可以了。


    javax.servlet
    javax.servlet-api
    4.0.1
    provided

tips:假如不清楚具体怎么写,可以到maven的中央仓库:https://mvnrepository.com/ 直接搜索所需要的jar包名称,选择合适的版本,同时会提供一段代码,如下图所示,直接将代码复制到pom.xml中即可。

【maven】记第一次使用maven创建web工程遇到的坑_第8张图片

添加完成以后,就能正常添加servlet文件了。这里还要注意一点,创建servlet的时候不要勾选【Create Java EE 6 annotated class】,这样创建的servlet总是找不到会报404错误,应该是地址没有指定清楚的缘故,还是手动在web.xml添加路径比较好。

【maven】记第一次使用maven创建web工程遇到的坑_第9张图片

web.xml手动添加servlet相关设置 


  Archetype Created Web Application
  
    MyServlet
    com.yy.servlet.MyServlet
  
  
    MyServlet
    /
  

打开MyServlet.java文件,编写简单的逻辑代码直接跳转到index.jsp,在doGet方法下添加

request.getRequestDispatcher("/index.jsp").forward(request,response);

doPost方法下添加

doGet(request,response);

现在的pom.xml文件是这样的




    4.0.0

    com.yy
    maven_web
    1.0-SNAPSHOT
    war

    maven_web Maven Webapp
    
    http://www.example.com

    
        
            junit
            junit
            4.12
            test
        

        
            javax.servlet
            javax.servlet-api
            4.0.1
            provided
        
    


直接compile,这里输出了1个[WARNING]和2个[ERROR]

#->1个 [WARNING]

[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!

解决办法是在pom.xml中添加如下代码


    UTF-8

 #->2个 [ERROR]

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project maven_web: Compilation failure: Compilation failure: 
[ERROR] 不再支持源选项 5。请使用 7 或更高版本。
[ERROR] 不再支持目标选项 5。请使用 7 或更高版本。

问题2 compile环境下的JDK版本问题

默认的compile插件版本是3.1,而这个版本对应的默认Java Compiler是1.5,也就是JDK 5

结合[ERROR]的输出信息自然就明白了,JDK版本太低,不再支持源选项 5。请使用 7 或更高版本

因此解决思路就是要修改jdk的版本即可。

[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven_web ---

【maven】记第一次使用maven创建web工程遇到的坑_第10张图片 【maven】记第一次使用maven创建web工程遇到的坑_第11张图片

解决方法也有两种方式

参照官方文档:https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html

#1> 直接指定Java language的(-source)版本和JVM(-target)版本即可。

标签中直接修改,需要注意的是source版本和target版本需保持一致,例如这里使用的JDK是JavaSE 13


  [...]
  
    UTF-8
    13
    13
  
  [...]

另外需要注意一下有的JavaSE x完全等同于1.x,下图是JDK发布版本的命名规范。

【maven】记第一次使用maven创建web工程遇到的坑_第12张图片

注意从5开始就不再使用1.x的旧名,但并未完成舍弃,所以5-8这几个版本还是沿用了1.x的命名规范。假如这里想要使用Java8,下面两种写法是等价的。但最新版JavaSE13就不能这样写了。


  [...]
  
    UTF-8
    1.8
    1.8
  
  [...]



  [...]
  
    UTF-8
    8
    8
  
  [...]

 #2-> 标签添加maven-compiler-plugin并指定-source和-target的版本。


    
        
            org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    13
                    13
                
            
    

假如仅仅添加了maven-compiler-plugin,而没有指定-source和-target的版本,按照官网的说法,-source和-target默认版本是1.6。所以我特地测试了一下,结果如下,确实默认的版本就是JavaSE 6


    org.apache.maven.plugins
    maven-compiler-plugin
    3.8.1

【maven】记第一次使用maven创建web工程遇到的坑_第13张图片


现在通过maven工具栏中的“M”标志,执行mvn tomcat:run 

【maven】记第一次使用maven创建web工程遇到的坑_第14张图片

打开浏览器,输入:http://localhost:8080/maven_web_2/MyServlet 回车

------2020-07-07-更新----------------------------------

这大概是一劳永逸的方法,直接修改maven安装目录下的settings.xml,在标签里添加如下代码,直接指定编译JDK的版本即可


    jdk-1.8
    
        true
        1.8
    
    
        1.8
        1.8
        1.8
    

 问题3 tomcat插件版本问题导致运行报错Compilation error

【maven】记第一次使用maven创建web工程遇到的坑_第15张图片

【maven】记第一次使用maven创建web工程遇到的坑_第16张图片

原因是maven自带的tomcat插件默认使用的是tomcat6,版本太低,不兼容,造成compiler error

解决方案调整Tomcat的版本,默认是6,我们这里修改成7,在标签里添加如下代码


    org.apache.tomcat.maven
    tomcat7-maven-plugin
    2.2
    
    
    

再次运行mvn tomcat7:run,成功!请注意这里不再是tomcat:run而是tomcat7:run

【maven】记第一次使用maven创建web工程遇到的坑_第17张图片

【参考资料】

http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html

http://tomcat.apache.org/maven-plugin-2.1/tomcat7-maven-plugin/plugin-info.html

http://www.05bk.com/714.html

https://segmentfault.com/a/1190000021673498

你可能感兴趣的:(maven,maven,java)