maven(POM坐标依赖)

Posted Dream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven(POM坐标依赖)相关的知识,希望对你有一定的参考价值。

1、POM

(1)概念:

项目对象模型(Project Object Model),每一个maven项目都要提供pom.xml

(2)POM的四个部分:

a、POM Relactionships项目间关系

坐标:groupid组、artifactID标识、version版本号(唯一标识项目在仓库中的位置)

  <groupId>pers.zhb</groupId>
  <artifactId>MyMaven</artifactId>
  <version>1.0-SNAPSHOT</version>

依赖:dependencies当前项目依赖哪些项目(通过依赖导入jar包)

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>2.3.24</version>
    </dependency>
  </dependencies>

多模块和继承:modules多模块,parent继承(使用多模块和继承对整个项目进行拆分)

b、Project Information项目信息

名称:name

描述:description

c、Bulid Settings(项目构建时的相关配置)

属性信息:properties

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

打包方式:packaging选择打包方式,jar包、war包、pom

  <packaging>war</packaging>

构建相关配置:bulid

<build>
    <finalName>MyMaven</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>

        <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
          <configuration>
            <port>8888</port>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <target>1.8</target>
            <source>1.8</source>
            <encoding>UTF-8</encoding>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

报告相关配置:reporting

d、构建环境相关配置(Bulid Environment)

profiles:使用(项目移植)

(3)有效POM、自定义POM和超级POM

自定义POM:Maven的所有操作都是基于插件的,自定义pom.xml没有定义插件,但是能运行test,所以项目运行时生效的不是自定义POM,而是有效POM

有效POM:在项目运行时生效的POM,有效POM=自定义POM+超级POM

超级POM:超级POM(如:编译、测试插件,虽然未定义但是可以使用)在Maven环境中,所有定义的pom.xml继承超级POM

 

2、坐标和依赖

在pom.xml里面可以通过<dependencies>标签配置项目的依赖(导入jar包),通过依赖目标项目的坐标,从仓库中找到项目(也就是说只要知道坐标就能获取到jar包)

(1)获取坐标的方式

a、网站搜索

http://search.maven.org/

http://mvnrepository.com/

b、使用Maven插件的索引功能

(2)依赖

当我们导入一个jar包,同时会自动导入依赖的jar包

 

 

 (3)依赖的属性

坐标:导入一个jar包依赖,必须要素

      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>

依赖项目类型:type,默认值为jar

optional:标记依赖是否是可选的,如果A依赖B,B又依赖C,那么A依赖于C就可以设置为可选的

exclusions:排除传递依赖,解决间接依赖的jar包冲突的问题

scope:jar包的以来范围,决定jar包在什么情况下生效

 <scope>provided</scope>

(4)传递性依赖

a、传递性依赖

 

 b、依赖调节

 

 B可以直接依赖于G,亦可以先依赖于C,C再依赖于G,这样就会出现一个问题就是G的版本不一致(图中是一致的),如果导入不同的版本的jar包会出现问题

调解原则(只对传递依赖有效):

路径近者优先

第一声明者优先

 

以上是关于maven(POM坐标依赖)的主要内容,如果未能解决你的问题,请参考以下文章

Maven专题1——坐标与依赖

Maven添加坐标(依赖)及在Eclipse中的操作

maven依赖的描述

maven坐标及依赖范围的学习

metrics-core-2.2.0.jar的maven依赖怎么写

idea中maven导入jar包