Maven项目的pom文件中各标签详解

POM是项目对象模型(Project Obiect Model )的简称。

pom.xml主要描述了项目的maven坐标,该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。是项目级别的配置文件。

1.声明规范
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!-- pom版本标签(必须要的),表示是一个固定的版本,指定了当前pom的版本 -->
    <modelVersion>4.0.0</modelVersion>
2.modelVersion
<!--    modelVersion 描述这个POM文件是遵从哪个版本的项目描述符-->
<!--    modelVersion:指定了当前POM模型的版本,对于Maven2及Maven 3来说,它只能是4.0.0;-->
<modelVersion>4.0.0</modelVersion>
3.packaging

标签体解析:

<!-- 打包的机制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默认为jar -->
<packaging>jar</packaging>
<!--表示这个工程仅仅是用来管理依赖的,可以被继承(参考下面的parent标签)-->
<packaging>pom</packaging>
4.name
<!-- 项目的名称,maven生成文档与展示的时候用 -->
<name>blogserver</name>
5.description
 <!-- 本项目的详细描述 -->
<description>贝贝无敌帅!!!</description>
6.parent
<!--父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。坐标包括groupID,artifactID和version等。-->
<parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>1.5.9.RELEASE</version>
     <!--父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath(相对路径)位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。-->
     <relativePath/> <!-- lookup parent from repository -->
</parent>
7.properties(配置全局属性)
<properties>
    <!-- 项目编码 -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     <!--在标签内可以把版本号作为变量/属性进行定义(版本锁定),后面dependency中用到版本号时可以用${变量名}的形式代替,这样做的好处是—当版本号发生改变时,只要更新properties标签中的变量值就行了,不用更新所有依赖的版本号-->
    <!-- java版本(但要是做整合的话,那么就不能使用版本绑定了,得要老老实实手动加版本,eg:mybatis整合到spring
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId> 
            <version>2.0.6</version>
        </dependency>-->
    <java.version>1.8</java.version>
    <spring.version>5.0.2.RELEASE</spring.version> <!--RELEASE表示最新的发布版本-->
</properties>

eg:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <!--直接对版本进行引用-->
            <version>${spring.version}</version> 
        </dependency>
8.dependencies
 <!--本项目的所有依赖关系 --> 
<dependencies>
    <!-- 每个dependency都对应这一个jar包 -->  
    <dependency>
        <!--依赖的坐标--> 
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.1</version>
    </dependency>
    
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.0.29</version>
    </dependency>

    <!--junit(单元测试)-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

标签解析:

  • groupld

    <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如org.sang,maven会将该项目打成的jar包放本地路径:/org/sang --> 
    <groupId>org.sang</groupId>
    
  • artifactId

     <!-- 本项目唯一的id,一个groupId下面可以有很多个项目,就是靠artifactId来区分的 -->
    <artifactId>blogserver</artifactId>
    
  • version

    <!-- 本项目目前所处的版本号 -->
    <version>0.0.1-SNAPSHOT</version>
    
  • scope

    scope主要是为了管理依赖的部署,确定依赖的使用范围。使用scope标签,可以很方便、直观的进行依赖的总体管理。

    scope的标签体解析:

    我们把.class文件叫做字节码文件,而.java文件叫做源码。

    什么是编译:就是对源码进行翻译,翻译之后就变成了.class文件了。
    什么是运行:编译好了之后,将.class文件装载到JVM上进行执行。

    • compile(默认值)
      缺省值,可省略不写。此值表示该依赖需要参与到项目的编译、测试以及运行周期中,打包时也要包含进去。eg:commons-fileupload

    • provided
      该依赖在打包的时候可以不用包含进去,别的设施会提供。事实上该依赖理论上可以参与编译、测试、运行等周期。相当于compile,但是打包阶段做了exclude(排除)操作,eg:servlet-api、jsp-api

    • runtime
      该依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段。

    • test
      该依赖仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,eg:上面的Junit

    • system
      从参与度来说,和provided相同,但是它不会去maven仓库寻找依赖,而是在本地找,需要配合systemPath标签使用。
      eg:

      <dependency>
          <groupid>org.hamcrest</groupid>
          <artifactid>hamcrest-core</artifactid>
          <version>1.5</version>
          <scope>system</scope>
          <systempath>${basedir}/WebContent/WEB-INF/lib/hamcrest-core-1.3.jar</systempath>
      </dependency>
      
    1. import
      由maven 2.0.9新加入,只能在dependencyManagement中使用,相当于从其它pom文件中导入依赖设置。
9.build

打开父pom.xml修改打包方式jar为pom,注意:build内容也需要做替换,因为默认的spring-boot-maven-plugin这种方式,等到后期打包的时候它会一直提示你—你引入的依赖不存在!

   <!-- 构建配置 -->
   <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <!-- 资源文件拷贝插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!-- java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <!-- 配置Tomcat插件 -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
  </build>
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值