Maven学习专题--Maven入门实例
上篇博客中对maven进行了简单的介绍和环境搭建,现在基于本次公司项目先创建一个QuickStart入门的web项目来对maven的目录结构、命令及其对应的生命周期、依赖管理进行解释。
一、入门实例
注:此项目工程代码已经上传到GitHub:https://github.com/wanyouxian/Maven,commit号:d3f45e7da8250c2e1af039b535296c1329eeff6e
1、创建maven项目

2、点击Next后

3、点击Next

4、创建完成后目录结构如下

对于1框中的目录条目主要用于放置源码和配置文件
对应2框中的目录条目主要用于放置测试代码和配置文件
对于3框中的pom.xml文件是依赖管理的配置文件
5、编写代码

在上图目录结构下分别创建文件HelloWorldServlet.java和WEB-INF/web.xml文件
1 package com.rocky.quickstart.web; 2 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 public class HelloWorldServlet extends HttpServlet 10 { 11 12 private static final long serialVersionUID = 1L; 13 14 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 15 { 16 response.getWriter() 17 .write("+++++++++++++++++wyx:In " + this.getClass().getSimpleName() + " doGet+++++++++++++++++"); 18 } 19 20 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 21 { 22 doGet(request, response); 23 } 24 }
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 5 id="WebApp_ID" version="2.5"> 6 <welcome-file-list> 7 <welcome-file>index.html</welcome-file> 8 <welcome-file>index.htm</welcome-file> 9 <welcome-file>index.jsp</welcome-file> 10 <welcome-file>default.html</welcome-file> 11 <welcome-file>default.htm</welcome-file> 12 <welcome-file>default.jsp</welcome-file> 13 </welcome-file-list> 14 <servlet> 15 <description></description> 16 <display-name>HelloWorldServlet</display-name> 17 <servlet-name>HelloWorldServlet</servlet-name> 18 <servlet-class>com.rocky.quickstart.web.HelloWorldServlet</servlet-class> 19 </servlet> 20 <servlet-mapping> 21 <servlet-name>HelloWorldServlet</servlet-name> 22 <url-pattern>/HelloWorldServlet</url-pattern> 23 </servlet-mapping> 24 </web-app>
6、如果已经做到这个步骤后应该是一堆报错,主要是没有引入jar包的依赖关系导致,修改pom.xml文件如下:
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/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>com.rocky</groupId> 5 <artifactId>QuickStart</artifactId> 6 <version>0.0.1-SNAPSHOT</version> 7 <packaging>war</packaging> 8 <build> 9 <plugins> 10 <plugin> 11 <groupId>org.apache.maven.plugins</groupId> 12 <artifactId>maven-compiler-plugin</artifactId> 13 <version>3.5.1</version> 14 <configuration> 15 <source>1.8</source> 16 <target>1.8</target> 17 <encoding>UTF-8</encoding> 18 </configuration> 19 </plugin> 20 </plugins> 21 </build> 22 <dependencies> 23 <dependency> 24 <groupId>javax.servlet</groupId> 25 <artifactId>servlet-api</artifactId> 26 <version>2.5</version> 27 <scope>provided</scope> 28 </dependency> 29 <dependency> 30 <groupId>javax.servlet</groupId> 31 <artifactId>jsp-api</artifactId> 32 <version>2.0</version> 33 <scope>provided</scope> 34 </dependency> 35 </dependencies> 36 </project>
7、正常情况下到这里应该就完成了,下面进行部署验证
项目工程目录右键--run as--maven build...--输入:tomcat:run确定即可

然后在浏览器输入:http://localhost:8080/QuickStart/HelloWorldServlet正确的情况应该出现如下图界面

二、命令及其对应的生命周期
其实写到这里,我自己都认为已经结束了,刚刚看了下摘要,发现还有两个方面没有讲到,下面对常见命令进行说明,如果有Linux基础这些是非常好理解的。
clean命令--在项目工程目录下通过cmd执行:mvn clean 就是删除编译的文件,等同任何一个Linux下的工程项目中的make clean,其本质就是删除编译生成的target目录

compile命令--在项目工程目录下通过cmd执行:mvn compile就是执行javac ,等同gcc/g++/make等,执行该命令后会在工程目录下生成target目录和clean命令作用相反

test命令--在项目工程目录下通过cmd执行:mvn test其实也是执行javac命令,只是这次的javac只编译工程目录test中的测试代码并且执行编译后的测试代码

package命令--在项目工程目录下通过cmd执行:mvn package其实就是将项目打包,web项目打成war包,java普通项目打包成jar包,生成的包放在target目录下。
install命令--在项目工程目录下通过cmd执行:mvn install其实是将对应的打成的包发布到仓库的过程
关于生命周期,准确的说应该是项目的管理的生命周期,但是每个命令的确确实实能代表项目的生命周期,比如说test代表编码阶段,compile代表编译阶段等。我们需要注意的是package会执行compile,install会执行compile和package
三、依赖管理
依赖管理主要是对pom.xml的配置,结合上面的pom.xml内容,下面对各个节点进行解释,在实际开发中这个工作一般程序员是不需要做的。
build节点:主要指定编译插件和编译使用的jdk版本
dependencies节点:是依赖jar包配置的元素,而每个具体的jar包的配置节点为:dependency,其中groupId、artifactId、version指定的是jar包的坐标,用于生成jar包的引用索引。特别要注意的是scope节点,该节点可以取值为:compile、provided、runntime、test几种常用的值。该几种取值我认为其本质是指定依赖的生命周期,其实这么说也欠缺推敲,暂且这么理解吧。
provided:主要是在编码阶段引入的jar包,但是编译和运行是不需要的,因为web容器中包含的有该jar包,如:servlet-api
compile:主要是容器中没有,而且编译时需要的jar包,如公司内部使用的jar包
runntime:主要是在运行期间依赖的jar包,我们在项目中使用的反射获得的类。如:数据库驱动包
test:主要是用于测试使用的jar包。如Junit4 jar包
注:关于依赖的传递会在第四篇博客中讲解。

浙公网安备 33010602011771号