上篇博客中对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 }
View Code
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>
View Code
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>
View Code
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包
注:关于依赖的传递会在第四篇博客中讲解。