上篇博客中对maven进行了简单的介绍和环境搭建,现在基于本次公司项目先创建一个QuickStart入门的web项目来对maven的目录结构、命令及其对应的生命周期、依赖管理进行解释。

一、入门实例

注:此项目工程代码已经上传到GitHub:https://github.com/wanyouxian/Maven,commit号:d3f45e7da8250c2e1af039b535296c1329eeff6e

1、创建maven项目

maven项目怎么使用javafx maven项目实例_maven项目怎么使用javafx

2、点击Next后

maven项目怎么使用javafx maven项目实例_jar包_02

3、点击Next

maven项目怎么使用javafx maven项目实例_java_03

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

maven项目怎么使用javafx maven项目实例_java_04

对于1框中的目录条目主要用于放置源码和配置文件

对应2框中的目录条目主要用于放置测试代码和配置文件

对于3框中的pom.xml文件是依赖管理的配置文件

5、编写代码

maven项目怎么使用javafx maven项目实例_java_05

在上图目录结构下分别创建文件HelloWorldServlet.java和WEB-INF/web.xml文件

maven项目怎么使用javafx maven项目实例_maven项目怎么使用javafx_06

maven项目怎么使用javafx maven项目实例_xml_07

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

 

maven项目怎么使用javafx maven项目实例_maven项目怎么使用javafx_06

maven项目怎么使用javafx maven项目实例_xml_07

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文件如下:

maven项目怎么使用javafx maven项目实例_maven项目怎么使用javafx_06

maven项目怎么使用javafx maven项目实例_xml_07

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确定即可

maven项目怎么使用javafx maven项目实例_xml_12

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

maven项目怎么使用javafx maven项目实例_maven项目怎么使用javafx_13

二、命令及其对应的生命周期

  其实写到这里,我自己都认为已经结束了,刚刚看了下摘要,发现还有两个方面没有讲到,下面对常见命令进行说明,如果有Linux基础这些是非常好理解的。

clean命令--在项目工程目录下通过cmd执行:mvn clean  就是删除编译的文件,等同任何一个Linux下的工程项目中的make clean,其本质就是删除编译生成的target目录

maven项目怎么使用javafx maven项目实例_xml_14

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

maven项目怎么使用javafx maven项目实例_maven项目怎么使用javafx_15

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

maven项目怎么使用javafx maven项目实例_maven项目怎么使用javafx_16

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包

注:关于依赖的传递会在第四篇博客中讲解。