Maven实战(座标和依赖)

Maven实战(坐标和依赖)

 

 1.前言

本篇博客紧接着上一篇博客,把maven的其余知识梳理一下.主要介绍一下Maven中的其他理论知识


 2.坐标

2.1 什么是坐标

<span style="font-family:SimSun;font-size:18px;"> <groupId>com.tgb.test</groupId>
  <artifactId>helloWorld</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>  默认值为jar方式</span>


正如上图所示,为了对某一个构建进行唯一的标识,就出现坐标的概念了.通过坐标就可以唯一的找到所需要的构件了.


2.2 依赖范围管理

 1.test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖
 2.compile:指的是编译范围有效,在编译和打包时都会将依赖存储进去
 3.provided:在编译和测试的过程中有效,最后生成war包时不会加入,例如:servlet-api,因为servlet-api在tomact等web服务器已经存在,如果再打包会冲突
 4.runtime:在运行时依赖,在编译的时候不会依赖
 默认的依赖范围是compile,并且依赖的时候遵循就近原则


2.3 依赖的传递性

在Maven中依赖是会被传递的

  A-->C B==>A ==>B-->C 这种依赖是基于compile这个范围进行传递
  对于传递的依赖而言,主要是针对compile作用域传递
 依赖的解决方法时,路径最短者优先,先声明的优先


2.4 可选性依赖

  例如A-->B B-->X(可选)  B--Y(可选) 如果标记为可选的话,那么A再依赖B的时候,就不会再依赖X和Y
  这时,只要在B中声明X和Y的依赖时,加上一个关键字即可

<span style="font-family:SimSun;font-size:18px;"><span style="font-family:SimSun;font-size:18px;"><dependencies>
    <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.7</version>
     <scope>test</scope>
     <!-- 可选性依赖 -->
     <optional>True</optional>
     <exclusions>
       <exclusion>
       <!-- 可以排除依赖 -->
         <artifactId></artifactId>
         <!-- 当前pom文件的任意xxx信息 -->
         <groupId>${project.version}</groupId>
       </exclusion>
     </exclusions>
    </dependency>
  </dependencies>
</span></span>

2.5  排除性依赖

比如说A-->B B-->X B-->Y,而此时A并不想依赖于X和Y,那么再A的pom文件中就可以设置排除性依赖

Maven实战(座标和依赖)


2.6 归类依赖

 我们可以在Maven中,一个地方定义属性,然后来管理所有的版本

<span style="font-family:SimSun;font-size:18px;"><span style="font-family:SimSun;font-size:18px;"><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>com.tgb.test</groupId>
  <artifactId>helloWorld</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <properties>
    <!-- 定义属性 -->
    <junit.version>4.7</junit.version>
  </properties>
  <dependencies>
    <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <!-- 引用属性版本 -->
     <version>${junit.version}</version>
     <scope>test</scope>
     <!-- 可选性依赖 -->
     <optional>True</optional>
     <exclusions>
       <exclusion>
         <!-- 可以排除依赖 -->
         <artifactId></artifactId>
         <!-- 当前pom文件的任意xxx信息 -->
         <groupId>${project.version}</groupId>
       </exclusion>
     </exclusions>
    </dependency>
  </dependencies>
</project>



   </span></span>


 3.聚合和继承

3.1 聚合

使用聚合的话,我们就可以在一个模块中,同时把其他模块的包打进来.但是要注意的是,聚合的模块的文件类型必须是pom

<span style="font-family:SimSun;font-size:18px;"><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>com.tgb.test</groupId>
  <artifactId>HelloWorldTest1</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
    <modules>
  <!-- 聚合是模块的位置 -->
   <module>../HelloWorldTest1</module>
   <module>../HelloWorldTest2</module>
  </modules>
  
</project></span>

3.2 继承

使用继承的话,我们可以把所有公共的部分提取出来,放置到parent中来管理,然后子项目直接继承即可

<span style="font-family:SimSun;font-size:18px;"><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>com.tgb.test</groupId>
  <artifactId>HelloWorldTest1</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <!-- 要继承的父项目 -->
   <parent>
    <groupId>com.tgb.test</groupId>
    <artifactId>HelloWorld</artifactId>
    <version>${project.version}</version>
    <!-- 继承的绝对路径是POM的文件 -->
    <relativePath>../user-parent/pom.xml</relativePath>
  </parent>

  
</project></span>

3.3 依赖版本管理

我们可以把所有项目中用到的插件的版本在父项目中管理起来.具体看下实例

<span style="font-family:SimSun;font-size:18px;"><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>com.tgb.test</groupId>
  <artifactId>helloWorld</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>



  <parent>
    <groupId>com.tgb.test</groupId>
    <artifactId>HelloWorld</artifactId>
    <version>${project.version}</version>
    <!-- 继承的绝对路径是POM的文件 -->
    <relativePath>../user-parent/pom.xml</relativePath>
  </parent>



  <!-- 属性版本管理 -->
  <properties>
    
  </properties>
  
  <!-- 项目版本依赖管理,可以在父项目中添加改配置,并且配置好项目的version
  在子项目中可以继承该项目,但是如果不在依赖中添加的话,就不会依赖到,可以做到灵活的配置 -->
  <dependencyManagement>
    <dependencies>
     <dependency>
       <artifactId></artifactId>
       <groupId></groupId>
       <scope></scope>
       <version></version>
     </dependency>
    </dependencies>
  </dependencyManagement>
  
  
  
  <modules>
    <!-- 聚合是模块的位置 -->
    <module>../HelloWorldTest1</module>
    <module>../HelloWorldTest2</module>
  </modules>
  <dependencies>
    <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.7</version>
     <scope>test</scope>
     <!-- 可选性依赖 -->
     <optional>True</optional>
     <exclusions>
       <exclusion>
         <!-- 可以排除依赖 -->
         <artifactId></artifactId>
         <!-- 当前pom文件的任意xxx信息 -->
         <groupId>${project.version}</groupId>
       </exclusion>
     </exclusions>
    </dependency>
  </dependencies>
</project>


   
</span>


 4.小结

    本篇主要介绍了,maven的理论知识,但是这些知识是学习maven的重点,一定要掌握好


版权声明:本文为博主原创文章,未经博主允许不得转载。