Maven的pom.xml文件配置,热步署(九)上

简介: Maven的pom.xml文件配置,热步署(九)

一. 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

相关文章
|
4天前
|
XML 数据格式
小米备份descript.xml文件
小米备份descript.xml文件
12 0
|
16天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
20 0
|
18天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
1月前
|
Java 数据库连接 数据库
hibernate正向生成数据库表以及配置——Teacher.hbm.xml
hibernate正向生成数据库表以及配置——Teacher.hbm.xml
13 1
|
1月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
11 0
|
1月前
|
Java Maven
Maven【5】在IDEA环境中配置和使用Maven
Maven【5】在IDEA环境中配置和使用Maven
65 1
|
2天前
|
Java Maven
【IDEA】常用快捷键和自定义方法补全(附如何设置IDEA全局配置,如Maven)
【IDEA】常用快捷键和自定义方法补全(附如何设置IDEA全局配置,如Maven)
8 0
|
7天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
17 1
|
18天前
|
Java Maven
SpringMVC常用Maven POM.xml依赖包片段
SpringMVC常用Maven POM.xml依赖包片段
|
1月前
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
15 1