参考网址:http://blog.csdn.net/remote_roamer/article/details/51724378

下面给大家讲讲如何正确地新建maven工程,以及为什么不能转成Dynamic web module3.0。

假设大家对eclipse都比较熟悉了,话不多说,请看图:

正确新建maven Dynamic web 项目_第1张图片

过滤器里输入web。我们要新建一个web工程。

正确新建maven Dynamic web 项目_第2张图片


正确新建maven Dynamic web 项目_第3张图片


新生成的工程默认的jdk和compiler是1.5的。而且没有src/main/Java这样的目录。web.xml里也是2.3的。所以我们第一件事是修改web.xml

正确新建maven Dynamic web 项目_第4张图片



[html] view plain copy 

 

  1. xml version="1.0" encoding="UTF-8"?>  

  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

  3.     xmlns="http://xmlns.jcp.org/xml/ns/javaee"  

  4.     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee   

  5.         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"  

  6.     id="WebApp_ID" version="3.1">  

  7.       

  8.     <display-name>Archetype Created Web Applicationdisplay-name>  

  9. web-app>  



然后在这里把这两项取消勾选,点击OK
正确新建maven Dynamic web 项目_第5张图片


再次打开这个页面,把这两项勾选上,然后点击Further ocnfiguration available

正确新建maven Dynamic web 项目_第6张图片


把默认的编译路径remove掉(这个路径不正确,必须删掉,不然报错)。

换成src/main/Java和src/main/resources. 输出路径改为target/classes

这一步结束后,我们的src/main/java目录也自动出现了。

正确新建maven Dynamic web 项目_第7张图片


正确新建maven Dynamic web 项目_第8张图片

最后就是这个样子的。点击Next

正确新建maven Dynamic web 项目_第9张图片

这一步不改成src/main/webapp。默认会生成一个WebContent目录。WebContent目录里的内容跟webapp重复了。我们用webapp即可。

正确新建maven Dynamic web 项目_第10张图片

效果图:

正确新建maven Dynamic web 项目_第11张图片

再看一下编译路径,很好。是我们要的效果。

正确新建maven Dynamic web 项目_第12张图片

JDK也是JavaSE-1.8,是我们要的效果。注意是JDK不是JRE。不要选成JRE

正确新建maven Dynamic web 项目_第13张图片

编译器也是1.8的。好的很

正确新建maven Dynamic web 项目_第14张图片

但是当我们maven>>update project以后

正确新建maven Dynamic web 项目_第15张图片

项目报错了 Dynamic Module 3.1 requires Java 1.7 or newer

正确新建maven Dynamic web 项目_第16张图片

JDK又变成一开始默认的1.5了。 这是因为POM.xml里没有配置。

正确新建maven Dynamic web 项目_第17张图片


正确新建maven Dynamic web 项目_第18张图片



[html] view plain copy 

 

  1. <plugin>  

  2.     <artifactId>maven-compiler-pluginartifactId>  

  3.     <version>3.1version>  

  4.     <configuration>  

  5.         <source>1.8source>  

  6.         <target>1.8target>  

  7.     configuration>  

  8. plugin>  







然后在maven>>update project 错误解决了。正确新建maven Dynamic web 项目_第19张图片



最后把编码格式也设置一下,不然有中文的话编译可能会报错。

完整的pom.xml如下:


[html] view plain copy 

 

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

  2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  

  3.   <modelVersion>4.0.0modelVersion>  

  4.   <groupId>net.csdngroupId>  

  5.   <artifactId>mvn9artifactId>  

  6.   <packaging>warpackaging>  

  7.   <version>0.0.1-SNAPSHOTversion>  

  8.   <name>mvn9 Maven Webappname>  

  9.   <url>http://maven.apache.orgurl>  

  10.   <properties>  

  11.     <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>  

  12.   properties>  

  13.   <dependencies>  

  14.     <dependency>  

  15.       <groupId>junitgroupId>  

  16.       <artifactId>junitartifactId>  

  17.       <version>3.8.1version>  

  18.       <scope>testscope>  

  19.     dependency>  

  20.   dependencies>  

  21.   <build>  

  22.     <finalName>mvn9finalName>  

  23.     <plugins>  

  24.         <plugin>  

  25.             <artifactId>maven-compiler-pluginartifactId>  

  26.             <version>3.1version>  

  27.             <configuration>  

  28.                 <source>1.8source>  

  29.                 <target>1.8target>  

  30.             configuration>  

  31.         plugin>  

  32.   

  33.   

  34.   

  35.   

  36.     plugins>  

  37.   build>  

  38. project>  


最后,再来看一下部署路径有没有问题。很好,是我们要的效果。


正确新建maven Dynamic web 项目_第20张图片

修改好的project facet 保存在项目目录.setting文件夹下org.eclipse.wst.common.project.facet.core.xml


这样一个新的maven工程就建好了,总结一下:

1.出现Cannot change version of project facet Dynamic web module to 3.0 

的原因是我们的web.xml里写错了。从根源上解决问题。

2.maven>>update project之后,jdk和compiler变成了默认的1.5。所以要在pom.xml里配置一下。 不然会报 

Dynamic Web Module 3.1 requires java 1.7 or newer

3.maven compile 编译的时候报编码的错误。所以要在pom.xml里配置一下project.build.sourceEncoding。