一. Maven 的 pom.xml 文件配置
在 Maven构建的项目中,最重要的就是 pom.xml 文件, 在pom.xml 里面 定义了项目的信息,其父项目的信息(如果有父项目的话), 各种依赖jar包, 各种插件工具等, 所以掌握 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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- 基本设置 --> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <packaging>...</packaging> <dependencies>...</dependencies> <parent>...</parent> <dependencyManagement>...</dependencyManagement> <modules>...</modules> <properties>...</properties> <!-- 构建过程的设置 --> <build>...</build> <reporting>...</reporting> <!-- 项目信息设置 --> <name>...</name> <description>...</description> <url>...</url> <inceptionYear>...</inceptionYear> <licenses>...</licenses> <organization>...</organization> <developers>...</developers> <contributors>...</contributors> <!-- 环境设置 --> <issueManagement>...</issueManagement> <ciManagement>...</ciManagement> <mailingLists>...</mailingLists> <scm>...</scm> <prerequisites>...</prerequisites> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories> <distributionManagement>...</distributionManagement> <profiles>...</profiles> </project>
其中, project标签是 根标签,后面跟一些约束。
modelVersion 为模型版本号,指定 pom.xml 符合哪个版本的描述符。maven 2 和 3 只能为 4.0.0。
一.一 Maven项目的基本设置
<groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <packaging>...</packaging>
groupId 为公司名,通常是域名的反写。 artifactId 为项目名,version 为版本号, 有 SNAPSHOT (快照), LATEST (指某个特定构件的最新发布),RELEASE(最后一个发布版)
packaging为打包方式,有 jar,war,pom 等形式。
一.二 dependencies 元素
dependencies 元素下面有很多个 dependency 元素, dependency 里面对应着各自的依赖坐标。 如:
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> </dependencies>
其中,在dependency 元素里面, groupId, artifactId,version 是依赖的坐标信息, scope为依赖的范围。
除了以上的四个子节点之外,还有其他的信息
<dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-embedder</artifactId> <version>2.0</version> <type>jar</type> <scope>test</scope> <optional>true</optional> <exclusions> <exclusion> <groupId>org.apache.maven</groupId> <artifactId>maven-core</artifactId> </exclusion> </exclusions> </dependency>
optional指的是 让其他项目知道,当您使用此项目时,您不需要这种依赖性才能正常工作。
exclusions 指的是,去除某些依赖,排除依赖。 如在 SSH项目中: struts2不添加 javassist 依赖 。
<!-- struts2依赖 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.24</version> <exclusions> <exclusion> <groupId>javassist</groupId> <artifactId>javassist</artifactId> </exclusion> </exclusions> </dependency>
关于这些坐标的信息,可以去官网搜索。 如何搜索,可以看老蝴蝶以前写的文章。
一.三 parent 元素
Maven 各个项目之间,可以进行继承,也可以进行聚合, 其中,聚合也是一种特殊的继承,会有一种父级。 如在上一章的 聚合项目里面, CommonUtils 的父级是 SSMParent 一样。 Maven继承时,是单继承
<parent> <groupId>com.yjl</groupId> <artifactId>SSMParent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>CommonUtils</artifactId>
在 parent 元素里面, 需要指定一下 父级的坐标信息。
当指定了父级的坐标信息之后,就不需要指定子级即自身的 groupdId 和version 的信息了,默认与父级是相同的。 当然,如果不一样的话,也是可以指定的。
<parent> <groupId>com.yjl</groupId> <artifactId>SSMParent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.laohudie</groupId> <artifactId>CommonUtils</artifactId> <version>0.0.2-SNAPSHOT</version>
这个时候, CommonUtils 的公司名 就是 com.laohudie, 版本号就是 0.0.2-SNAPSHOT . 没有指定时,才与父级是相同的。
parent 元素里面,还有一个 relativePath 元素。
<parent> <groupId>com.yjl</groupId> <artifactId>SSMParent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../SSMParent</relativePath> </parent>
relativePath: 父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是…/pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom.
一般情况下,是不需要写的。
一.四 dependencyManagement 元素
dependencyManagement 依赖管理器, 可以在里面定义 一些依赖的信息, 但并不会实际下载和引用对应的依赖。 在 dependency 节点里面, 只需要定义相应的 groupId 和 artifactId 的信息即可, 版本号会自动从 dependencyManagement 里面拿。 但如果 dependency里面定义了版本号,那么就用 dependency里面的版本号。 这个常常发生于 父子 继承项目之间,为了统一管理依赖包的版本,确保所有子项目使用的版本一致。 类似的还有plugins和pluginManagement。 但用的不多, 现在喜欢用 properties 元素来 管理版本号。
一.五 modules 元素
在聚合项目开发时,用于指定这个项目下有哪些模块
如 SSMParent 的下有 CommonUtils 和SSMOA 模块,那么在 SSMParent 的pom.xml 里面 就显示:
<modules> <module>CommonUtils</module> <module>SSMOA</module> </modules>
在SSMOA 下面有 SSMPojo, SSMDao,SSMService, SSMWeb, 那么在 SSMOA 的pom.xml 里面就显示:
<modules> <module>SSMPojo</module> <module>SSMDao</module> <module>SSMService</module> <module>SSMWeb</module> </modules>
一.六 properties 元素
可以用 properties 来定义一些属性,可以在pom.xml的任意位置 进行引用, 用${propertie} 来进行引用。 通常用于控制 依赖的版本号。
如在 SSM 项目里面:
<properties> <springframework.version>4.2.4.RELEASE</springframework.version> </properties>
在依赖引用时:
<!-- spring web依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${springframework.version}</version> </dependency> <!-- spring-aspects依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${springframework.version}</version> </dependency>
一.七 build 元素
里面常用的有两种子标签, 一种是 resources (资源) 一种是 plugins (插件) 如 SSM里面。
1 . resources
<resources> <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 --> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources>
其中, directory 表示的是定义资源的路径, 默认的是:${basedir}/src/main/resources,
include 表示包括哪些, ** 表示任意目录
除了include, 还有一个 exclude, 排除哪些, 放置在 excludes 节点里面。
2 . plugins 插件
这是配置 tomcat的插件
<plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <!--tomcat的插件名, tomcat7-maven-plugin, 用的是tomcat7版本 --> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8026</port> <!--tomcat的端口号 --> <path>/ssm</path> <!--tomcat的项目名 --> <uriEncoding>UTF-8</uriEncoding> <!-- 防止get 提交时乱码 --> </configuration> </plugin> </plugins>
这是配置 jdk编译版本的插件
<plugin> <artifactId>maven-compiler-plugin</artifactId> <extensions>true</extensions> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin>
关于 Maven 插件的更多详细资料,可以参考 Aviva_ye 前辈的文章: [maven] 常用插件解析
一.八 其他配置
还有一些其他的配置, 如项目信息配置和环境配置, 目前没有用到,老蝴蝶也不会,所以就不讲解了。
如果想更多了解, 可以看 菜鸟编程的 Maven 部分: Maven POM