了解 pom.xml
pom.xml 文件代码如下:
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>youka</groupId>
<artifactId>test</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>test Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>test</finalName>
</build>
</project>
<modelVersion>4.0.0</modelVersion>
,<groupId>youka</groupId>
,<artifactId>test</artifactId>
这三个标签和 JavaSE 工程的相同,也是起到一个坐标的作用;<packaging>war</packaging>
,如果不写这个标签,默认是 jar 的;<name>test Maven Webapp</name>
<url>http://maven.apache.org</url>
,这两个起到的是辅助性的作用,比如 url 是当前这个工程访问时的路径;<dependencies> </dependencies>
,这标签的单词的意思是依赖,这是需要重点掌握的标签;<build> </build>
,在构建 Maven 工程时,相关的环境配置、版本配置、插件配置时需要在这个标签中进行
依赖
在 pom.xml 文件中,重点需要了解的就是 <dependencies> </dependencies>
这个标签。在<dependencies> </dependencies>
标签中需要摆放的就是一个又一个的<dependency> </dependency>
标签,这个标签就是表示一个依赖,在这个标签中定义出来一个依赖的坐标,其中的<scope></scope>
表示这个依赖是在构建 Maven 工程的那个阶段或者那个场景使用,在刚开始学习的过程中,可以先放放<scope></scope>
标签的使用。
说了这么多,可以也不明白依赖是干嘛的,简单来讲,依赖应用在导入第三方 jar 包上。
在传统的 JavaSE 和 JavaEE 工程中,导入第三方 jar 包(例如 mysql 驱动 jar 包)的流程:如果是 JavaSE,需要先将 jar 包复制到工程中,然后将其添加到 Build Path 中;如果是 JavaEE 直接将 jar 包复制到 WebContext.WEB-INF.lib 文件夹中即可,不需要添加到 Build Path 中,Eclipse 会自动完成。
而在 Maven 工程中,就需要使用依赖来完成第三方 jar 包的导入。例如,导入 mysql 驱动 jar 包。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
</dependencies>
保存文件之后,就会发现,左侧的项目中的 Maven Dependencies 中导入了 mysql-connector-java-8.0.13 这个 mysql 的驱动 jar 包了。
可以看到,我在依赖中写的是 junit 和 mysql 两条依赖,可是导入的是三个 jar 包,这就涉及到了依赖的两个概念——直接依赖和间接依赖。
其中 junit 和 mysql 都是我们直接需要的 jar 包,它们是直接依赖,而 protobuf 是 mysql 需要的 jar 包,Maven 将其一并引入进来,是间接依赖。
这就是 Maven 的一个好处:我们只需要记忆直接需要的那一个依赖的名字,就可以将所需要的东西都引入进来。
而传统的开发方式则需要将所有 jar 包一个一个的引入,非常耗时,而且还需要记忆一系列的名字、版本号,对环境搭建的功底要求比较高,甚至环境搭配好了,但是在使用过程中丢了其中一个 jar 包,很难被查出来,这也是传统模式慢慢被淘汰的原因。
比如我们后面需要学习的 Spring 框架,它需要引入很多 jar 包,如果使用传统方式非常耗时。
依赖关系一定是单向的!!!,不允许出现相互依赖的现象,即 A 依赖 B,B 依赖 A 是不被允许的。依赖是一个树形结构。
因为导入 jar 包需要用到依赖,刚开始接触的时候有很多依赖都是记不住的,这个时候就可以用这个网站检索需要的第三方 jar 包的依赖了。https://mvnrepository.com/
插件
一般称 <build> </build>
为构建,用于环境配置、版本配置、插件配置。Maven 插件主要有 tomcat7/jetty/maven-compliler/…
注意:这里的 tomcat7是 maven 的插件,而之前在 JavaEE 中用的 Tomcat 是Eclipse 的插件,是不一样的,maven 插件需要使用 build 标签在 pon.xml 中定义,而 Eclipse 的 Tomcat 插件依旧要像之前在 JavaEE 中的使用一样。
在 <build> </build>
中常用的标签一个是 <finalName></finalName>
,一个是<plugins></plugins>
。

- finalName 标签的内容是我们工程最后打包的名字,如果不配置的话,默认是 groupId、artifactId、version 这三个标签组合的名字,文件类型是 jar 或者 war;
- plugins 标签和 dependecies 标签差不多,其内部是多个
<plugin></plugin>
标签,每个 plugin 标签都是一个插件
简单的看两个插件 jetty 和 tomcat7 的配置,因为不同的插件,它的配置是不同的,所以只要记住最常用的这两个就很不错了。
jetty 的配置:
<build>
<finalName>test</finalName>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.7.v20160115</version>
<configuration>
<httpConnector>
<port>8081</port>
</httpConnector>
<webApp>
<contextPath>/${project.artifactId}</contextPath>
<!-- <contextPath>/test</contextPath> -->
</webApp>
</configuration>
</plugin>
</plugins>
</build>
上面的 xml 文件中的代码,表示项目最后打包时项目名会被设置为 test。引入 org.eclipse.jetty 组下的 jetty 插件,版本是 9.3.7.v20160115,其端口设置为 8081(不设置的话,默认是8080),项目名是 /test。
<webApp>
<contextPath>/${project.artifactId}</contextPath>
<!-- <contextPath>/test</contextPath> -->
</webApp>
单独吧 contextPath 标签拿出来讲一下,/${project.artifactId}
,这个语法很像 EL 表达式,这是 xml 中的表达式,表示此处的值是最大的标签 —— project 标签下的 artifactId 标签的值,也就是在这个项目中,该行和下面的注释是等价的。
再看下 tomcat7 的配置
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/${project.artifactId}</path>
<port>8080</port>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>