Maven学习笔记之——坐标和依赖(上)

Maven学习笔记之——坐标和依赖(上)

1、    Maven坐标概念

Maven通过构件的坐标来在Maven仓库中定位到具体的构件、Maven的坐标元素包括groupId、artifactId、versiion、packaging、classifier。Maven内置了一个中央仓库地址、需要时Maven会根据坐标到其中下载。具体关于中央仓库的介绍在后面。

2、    Maven坐标详解

比如下面一组坐标:

    <groupId>org.andy.items</groupId>
    <artifactId>scattered-items</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

groupId:定义当前Maven项目隶属的实际项目。

artifactId:定义实际项目中的一个Maven项目(模块)

version:定义Maven项目当前所出的版本。

packaging:定义Maven项目的打包方式、打包方式通常与生成构件的文件扩展名对应、例如上面最终生产的文件名为:scattered-items-1.0-SNAPSHOT.jar。而使用war打包方式的Maven项目最终生成的构件会有一个.war文件、其次打包方式会影响到构建的生命周期、当不定义packaging的时候、Maven会使用默认值jar。

classifier:用来帮助定义构建输出的一些附属构件、不能直接定义项目的classifier、因为附属构件不是项目直接默认生成的、而是由附加的插件帮助生成。

上述5个元素中、groupId、artifactId、version、是必须的、packaging是可选的、classifier是不能直接定义的。

3、    依赖配置

一个依赖可以包含的元素(项目中的pom.xml文件):

    <dependencies>
        <dependency>
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
            <scope></scope>
            <type></type>
            <optional></optional>
            <exclusions>
                <exclusion>
                    <groupId></groupId>
                    <artifactId></artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

跟元素project下的dependencies可以包含一个或者多个dependency元素、以声明一个或者多个项目依赖、每个依赖可以包含的元素有:

groupId、artifactId、verion:必须元素、基本坐标。

type:依赖的类型、对应与项目坐标的packaging、大部分情况下该元素不必配置、其默认值是jar。

scope:依赖的范围、

optional:标记依赖是否可选、

exclusions:用来排除传递性依赖。

这些都会在后面有详细说明。

4、    依赖范围

Maven在编译、测试、运行项目时会使用不同的classpath、依赖范围就是用来控制依赖与这三种classpath(编译classpath、测试classpath、运行classpath)的关系的、

compile:编译依赖范围。如果没有指定就会默认使用该依赖范围。使用此编译范围的Maven依赖、对于编译、测试、运行三种classpath都有效。

test:测试依赖范围、只对测试classpath有效。比如Junit、只有在编译和测试的时候才需要。

provided:已提供依赖范围、对于编译和测试有效、但是在运行时无效、如servlet.api。编译和测试项目的时候需要、但是在运行的时候、servlet容器已经提供、就不需要Maven重复提供。

runtime:运行时依赖、对于测试和运行classpath有效、但是在编译主代码是无效、如JDBC驱动的实现、项目主代码的编译只需要JDK提供的JDBC接口、只有在执行测试或者运行项目的时候才需要上述接口的具体JDBC驱动。

system:系统依赖范围。其与provided依赖范围完全一致。但使用时必须通过systemPath元素显示第指定依赖文件的路径、谨慎使用。

import:导入依赖范围、不会对三种classpath产生实际的影响、他是与dependencyManagement结合使用的。


依赖范围


编译classpath


测试classpath


运行classpath


示例


compile


Y


Y


Y


spring-core


test


Y


Y


junit


provided


Y


Y


servlet-api


runtime


Y


Y


JDBC驱动


system


Y


Y


本地的、Maven仓库之外的类库文件

时间: 2024-12-24 16:37:19

Maven学习笔记之——坐标和依赖(上)的相关文章

Maven学习笔记之——坐标和依赖(中)

Maven学习笔记之--坐标和依赖(中) 1.    传递性依赖 1.1    何为传递性依赖 项目中经常有引入一个jar包还要引入其他与其相关的jar包.自己搜的话要注意很多.比如版本问题等.而Maven会解析解析各个直接依赖的POM.将哪些必要的间接依赖以传递依赖的形式引入到项目中. 依赖范围不仅可以控制依赖与三种classpath关系.还对传递依赖产生影响. 假设A依赖B,B依赖C,我们说A对于B是第一直接依赖,B对于C是第二直接依赖,A对于C是传递性依赖.第一直接依赖的范围和第二直接依赖

Maven学习笔记之——坐标和依赖(下)

Maven学习笔记之--坐标和依赖(下) 1.    最佳实践 归纳Maven依赖使用的常用技巧.方便用来避免和处理很多常见问题. 1.1.     排除依赖 传递性依赖会给项目隐式地引入很多依赖,这极大地简化了项目依赖的管理.但是有些时候这种特性也会带来问题.例如,当前项目有一个第三方依赖,而这个第三方依赖由于某些原因依赖了另外一个类库的SNAPSHOT版本,那么这个SNAPSHOT就会成为当前项目的传递性依赖,而SNAPSHOT的不稳定性会直接影响到当前的项目.这时候需要排除掉该SNAPSH

Maven学习笔记之坐标

作为依赖管理工具,Maven定义了坐标用于唯一标识构件在仓库中的位置,构成了依赖管理的底层基础. Maven构件的坐标包括: groupId定义隶属实际项目的名称,一般是隶属组织或公司域名的倒序加上实际项目名称: artifactId定义模块的名称,一般是实际项目名称加上子模块名称.一个模块可能包含多个子模块,便于模块化管理: version定义模块的版本,主要包括稳定版本和SNAPSHOT版本: packaging定义模块的打包方式,常用的打包方式包括: - jar是普通模块的打包方式,即不在

Maven学习笔记之——仓库(上)

Maven学习笔记之--仓库(上) 1.    何为maven仓库 Maven可以在某一指定位置统一存放所有maven项目共享的构件.此指定位置就是maven仓库.实际的项目将不再自己存放其所依赖的构件.他们只需要声明这些依赖的坐标.在需要的时候就会自动根据坐标找到仓库中的构件.并使用他们. 仓库的意义:减少磁盘占用空间.去除大量重复的构件.尤其是项目越来越多.越来越大的时候.更便于统一管理所有控件. 2.    仓库的布局 任何一个构件都有其唯一的坐标.根据这个坐标可以定义其在仓库中的唯一存储

Maven学习笔记(二):Maven仓库

Maven仓库的知识点比较少,理解起来也很简单. 仓库只有两类:本地仓库和远程仓库.所谓本地仓库就是自己机器上的仓库,在setting.xml文件中进行配置: 1 <localRepository>E:/MavenStore</localRepository> 本地仓库中存储的就是在使用Maven解析项目时从远程仓库下载的依赖和自己安装的一些构建. 远程仓库很明显就是网络上的仓库,存储在一个神秘的地方(好吧,其实我是不知道在哪里).当Maven解析项目时,如果本地没有需要的依赖,就

Maven学习笔记之——仓库(中)

Maven学习笔记之--仓库(中) 1.    远程仓库的配置 当出现默认的中央仓库无法满足我们的需求或者连接不上的时候.我们可以通过POM文件来指定远程仓库. <repositories> <repository> <id>jboss-maven2-release-repository</id> <name>JBoss Repository</name> <url>http://repository.jboss.org/

maven详解之坐标与依赖

看着简单而又复杂的pom.xml文件,看似熟悉,当自己编写的时候觉得简单,但是看人家项目的时候又觉得复杂的很,现在我们一起来分析这个pom文件. Maven的坐标为各种构件引入了秩序,任何一个构件都必须明确的定义自己的坐标,maven的坐标包括如下的元素: groupId: 定义当前Maven项目隶属的实际项目 artifactId: 该元素定义实际项目中的一个Maven项目或模块 version: 该元素定义Maven项目当前所处的版本 packaging: 该元素定义Maven项目的打包方式

Maven学习笔记(1)之安装Maven

此笔记是学习Maven时自己摸索+各种百度而来,并非全部原创,望与各位一同学习,勿拍~勿拍~ 安装步骤: 1.下载Maven的最新版本,地址:http://maven.apache.org/download.cgi 2.将下载完成的压缩包放至D盘根目录(图方便,一会儿安装完再删就好) 3.在命令行上操作,进入到你想要安装的目录路径后敲:jar xvf 的命令来进行解压安装(请勿手动解压以省略此步) 4.配置环境变量 新建系统变量  MAVEN_HOME  变量值:D:\Java\apache-m

Maven学习笔记-使用Eclipse插件创建Java Webapp项目

使用Java的猿们,最多接触的大概就是web项目了吧?在学习Maven的过程中,首先当然就是创建一个webapp项目. 自己在尝试的过程中,碰到了很多的问题.我把详细的过程都记录下来,用以今后参考. 步骤: 如果未搭建好Maven开发环境,请参考前一篇:Maven学习笔记--环境搭建 打开Eclipse, 菜单栏选择File -> new -> other,在弹出的对话框中找到Maven Project. 在弹出的新建Maven项目的对话框中,不要勾选第一项"Create a sim