用eclipse建立maven web项目的相关教程已经很多了,这里不打算重复他们写过的东西,仅仅谈谈自己在实践过程中踩到的坑以及解决的办法。
下载安装Eclipse和Maven以及其插件
这里有一个可以参考的比较详细的教程
jre设置
按照网上的教程直接建立Maven web项目的话,你会发现默认使用的jre为j2se1.5,显然已经跟不上现在的时代了。如果按照网上许多的教程,直接改Build Path,把jre换成jdk 1.7或者1.8,确实能暂时解决问题。但不久之后你就会发现,一旦更新一次maven,jre又会回到j2se 1.5。这是因为maven默认使用比较老的jre。所以我们需要告诉maven我们要使用新版本的jre。
有两种方法解决。转载自游一游走一走
方法1.一劳永逸式
该方法是直接修改maven的用户配置文件。如果使用该方法,你应该先在eclipse里设定好user setting文件的路径(Windows-Preferences-Maven-UserSettings-UserSettings)。maven默认的用户配置文件在:maven根目录\conf\settings.xml。
打开用户配置文件,在标签内添加如下内容:(自行根据需要修改数字为合适的版本号)
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
方法2.定制式
如果你有特别的需要,比如不同的项目使用不同的jre。那么可以在项目的pom.xml里的build标签内添加如下内容,然后update那个maven 项目:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
这个原理是,该插件负责管理maven项目的jre运行环境。
框架配置文件的放置路径
与一般的项目从src中读取配置文件不同,maven项目是从src/main/resources读取配置文件的。应该把相关文件都放在src/main/resources,具体路径遵循src根目录(一般项目)=resources根目录(maven项目)。
新建项目没有src/main/java和src/test/java的问题
我没有找到什么很好的办法,只能自己手动添加了。
web module版本
新建maven web项目的Dynamic Web Module版本为默认的2.3。但现在早已进入3.0甚至3.1的时代了。我们想要直接通过项目的properties修改的话,会提示错误,无法修改。很多教程都提到了要用navigator视图,直接修改.settings文件夹下的org.eclipse.wst.common.project.facet.core.xml文件,将jst.web改成3.1就好了。这是对的。
但修改之后,有时候我们会遇到eclipse提示错误:Cannot change version of project facet Dynamic web module to 2.3。这个虽然不影响实际使用,但看着很烦。原因在于我们的web.xml配置还是2.3版本的。我们改为3.1版本就没问题了。
该解决方法参考自kolbe的博客文章
打开src/main/webapp/web.xml,将原本的内容删掉。
然后打开tomcat安装目录/webapps/ROOT/web.xml,复制其中的内容到你的web.xml中即可。(注意版本
我使用的是tomcat-8.0.36,其中的web.xml去掉注释后内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true">
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
</web-app>
Tomcat API
我们直接调用servlet相关的类,会提示没有这个类,也没有导入选项。这是因为我们没有添加服务器相关的包。
解决办法:
右键项目-properties-Java Build Path-Libraries-Add Library-Server Runtime-添加自己想用的服务器版本。
项目部署
我们直接运行服务器想要测试实现了某个框架简单功能的页面,可能会在控制台里提示找不到这个框架中的某一个类。但实际上我们已经通过pom.xml指定了依赖了,也确实在Maven Dependencies库中看到了相应的包。
这里的问题在于,我们没有设定将Maven Dependencies库部署到web-app/WEB-INF/lib下。
解决办法:
右键项目-properties-Deployment Assembly 按如图所示添加和修改部署。
当然,这里只是个示范,如果你有其它的用户库要在web程序运行时使用,那也需要导入。
依赖包maven信息
别用通用的搜索引擎了,通用搜索引擎的信息更新不够及时。直接上仓库去搜就行了:Maven 仓库
很贴心地列出了各种历史版本,想用哪个用哪个。
pom.xml配置
详细说明看这个,作者为niuzhenxin,这里只说我现阶段用到的东西。基本都是摘抄自那篇文章。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<!-- 声明项目描述符遵循哪一个POM模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 项目的全球唯一标识符 -->
<groupId>com.longfei</groupId>
<!-- 构件的标识符,它和group ID一起唯一标识一个构件。 -->
<artifactId>Learning_Hibernate</artifactId>
<!-- 项目产生的构件类型,因为我们是web项目,所以产生war文件。 -->
<packaging>war</packaging>
<!-- 项目当前版本,格式为:主版本.次版本.增量版本-限定版本号 -->
<version>0.0.1-SNAPSHOT</version>
<!-- 项目的名称, Maven产生的文档用 -->
<name>Learning_Hibernate Maven Webapp</name>
<!-- 项目主页的URL, Maven产生的文档用 -->
<url>http://maven.apache.org</url>
<!-- 项目相关的所有依赖 -->
<dependencies>
<!-- 一个依赖的相关信息 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.1.Final</version>
</dependency>
</dependencies>
<!-- 构建项目需要的信息 -->
<build>
<!-- 产生的构件的文件名 -->
<finalName>Learning</finalName>
<!-- 要使用的插件集 -->
<plugins>
<!-- 一个插件的相关信息 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>