美文网首页程序员
2.Maven坐标和依赖

2.Maven坐标和依赖

作者: 落叶飞逝的恋 | 来源:发表于2018-02-03 21:30 被阅读14次

1.Maven坐标

    Maven定义了一组规则,用于标识构件的唯一性。这些元素包括:groupId、artifactId、version、packaging、classifier。通过这些元素我们就可以找到对应的构件。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.3.RELEASE</version>
    <packaging>jar</packaging>
    <scope>...</scope>
    <optional>...</optional>
    <exclusions>...</exclusions>
</dependency>
  • 1.groupId

定义当前Maven项目隶属于的实际项目,通常定义为公司域名的倒写加实际项目简写。比如阿里巴巴(com.alibab.dubbo)

  • 2.artifactId

该元素定义实际项目中的一个Maven项目模块,通常做法是使用实际项目名称作为artifactId的前缀。比如(dubbo-client)

  • 3.version

该元素定义Maven项目当前所处的版本。通常命名方式为:主版本号.次版本号.修订号。(主版本号:产品方向改变,或者大规模API不兼容。次版本号:保持相对兼容,增加主要功能特性。修订号:保持完全兼容性,修复BUG、新增次要功能)起始版本为1.0.0

  • 4.packaging

该元素定义Maven的打包方式。jar生成jar包,war生成war包,pom就是作为父子工程的父工程,仅仅引用pom。

  • 5.scope

依赖范围

  • 6.optional

标记依赖是否可选

  • 7.exclusions

用来排除传递依赖

2.依赖范围

    依赖范围是用来控制引入的jar与classpath的关系。(编译时的classpath、测试的classpath、运行classpath)

  • 1.compile

编译依赖范围。如果没有指定scope类型,默认为compile。此依赖范围的Maven范围对编译、测试、运行三种classpath都有效

  • 2.test

测试依赖范围。此依赖范围的Maven依赖,只对测试classpath有效。在编译主代码或者运行项目使用时无法使用此类Maven依赖。

  • 3.provided

已提供依赖。使用此依赖范围的Maven依赖,对于编译和测试classpath都有效。但是在运行时无效。eg:servlet-api。

因为通常java web程序都是运行在容器里面了,比如tomcat,而tomcat已经提供了此依赖,故无须再引入。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>

  • 4.runtime

运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但是在编译主代码无效。比如JDBC驱动实现。因为主代码编译的只需要JDK提供的JDBC接口。只有在执行和测试需要具体的实现类

3.传递性依赖

    比如我们在引用Spring框架jar包的时候,在引入Spring Context jar包的时候,就无须引入spring-aop,或者spring-beans等等。因为Maven将这种传递依赖已经默认给我们加载好了。

4.排除依赖

    传递性依赖会给项目隐式地引入很多依赖,这极大地简化了项目依赖的管理。但是有有时候也会带来问题。比如:当前项目有依赖了第三方依赖,但是第三方依赖了另一个不稳定的版本。这样不稳定性就会传递给本项目。这时候就需要排除不稳定的版本依赖。

<dependency>
    <groupId>com.icegreen</groupId>
    <artifactId>greenmail</artifactId>
    <version>1.5.6</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
        </exclusion>
    </exclusions>
</dependency>

5.归类依赖

    如果项目依赖同一个项目的不同的模块,依赖的版本的都相同,则为了便于管理,使用properties元素定义Maven属性,比如spring项目。

<properties>
        <spring.version>4.3.14.RELEASE</spring.version>
</properties>

    定义了上述的属性,则在Maven运行的时候会将POM文件所有的${spring.version}替换掉。

6.优化依赖

    在软件开发过程中,会不断优化自己的代码。比如对Maven依赖,要及时去除多余的依赖。

查看当前项目的已解析的依赖

mvn dependency:list

以tree的形式展示已解析的依赖

mvn dependency:tree

查看未声明的依赖于声明但未使用的依赖

mvn dependency:analyze
[WARNING] Used undeclared dependencies found:
[WARNING]    org.springframework:spring-context:jar:4.3.14.RELEASE:compile
[WARNING]    org.springframework:spring-beans:jar:4.3.14.RELEASE:compile
[WARNING] Unused declared dependencies found:
[WARNING]    com.icegreen:greenmail:jar:1.5.6:test

    上面就是指项目中使用到的,但是没有显式申明的依赖,这里使用了未申明的spring-context。==这种依赖意味着潜在的风险。== 因为升级依赖的时候,相关传递性依赖的版本发生了变化,但是不易察觉。==容易导致项目出现错误。==

相关文章

  • 2.Maven坐标和依赖

    1.Maven坐标 Maven定义了一组规则,用于标识构件的唯一性。这些元素包括:groupId、artifact...

  • Spark 与hive集成 并且读取mysql数据

    1.Spark 和hive de 集成 2.maven 的依赖环境配置 3. 代码集成 4. 执行结果

  • Maven坐标和依赖

    摘要: Maven,坐标,依赖,依赖传递,依赖范围Maven的一大功能是管理项目依赖,为了能自动化解析任何一个ja...

  • (二)Maven之坐标和依赖

    目录[TOC] 坐标 引言: 坐标是依赖管理的基础,是构建的唯一标识。 组成元素: 使用groupId、artif...

  • 坐标,依赖,仓库

    何为Maven坐标 是Maven定义的一组规则,世界上任何一个构建都可以使用Maven坐标唯一标识,Maven坐标...

  • Maven 依赖、插件、仓库、坐标、聚合、继承

    1. 能做什么 构建、依赖管理、项目信息管理 2. 坐标 坐标是依赖管理的基础,通过坐标定位依赖的构件 model...

  • (V)Maven依赖

    依赖详解 groupId、artifactId、version依赖的基本坐标,对任何一个依赖来说坐标是最重要的,M...

  • 2020-07-06【Math】局部坐标转换为世界坐标

    局部坐标依赖父物体的旋转方向,确定自己的坐标轴。因此局部坐标转世界坐标需要依赖父物体的旋转量。关键代码: 实例:清...

  • maven基础

    坐标 maven管理项目依赖的底层基础-坐标。坐标元素:groupId、artifactId、version、pa...

  • spring boot+jpa简单实现

    1.创建maven项目 不演示了,想知道更多的自己百度 2.maven依赖 3.启动类 4.配置文件applica...

网友评论

    本文标题:2.Maven坐标和依赖

    本文链接:https://www.haomeiwen.com/subject/illpzxtx.html