Maven实战-2.pom.xml标签说明

news2025/1/11 1:51:13

前言

持续更新中…

pom.xml文件

1.<project>

这是pom.xml的根元素,所有的标签都包含在<project>…</project>之间。

2.<modelVersion>

指定当前POM模型的版本,对于maven2和maven3来说,它只能是4.0.0

<modelVersion>4.0.0</modelVersion>

3.<groupId>,<artifactId>和<version>

这三个元素定义了一个项目或其他的jar、pom、war的基本坐标。

<groupId>定义了项目属于哪个组,这个组往往和项目所在的组织或公司相关,例如在googlecode上建立一个项目myapp,那么<groupId>就是com.googlecode.myapp。

<artifactId>定义了当前项目在组中的唯一ID,例如定义为hello-world。可以这么理解,如果是单项目,artifactId可以和groupId的最后部分相同,否则artifactId就是子模块的名字即可。

<version>定义了项目的当前版本,例如1.0.0-SNAPSHOT。SNAPSHOT是快照的意思,后续会有说明。

4. <packing>

定义Maven的打包方式,默认是jar。

5.<classifier>

帮助定义构建输出的一些附属构建。classifier是不能直接定义的。

在这里插入图片描述

6.<name>

没有实际作用,只是可以起一个更友好的项目名称说明而已,不是必须的,但还是推荐为每个pom文件声明一个name。

7.<dependencies>

该元素下可以包含多个<dependency>元素,来声明项目的依赖。

8.<dependenciy>

8.1.<type>

依赖的类型,对应项目坐标定义的packaging,默认情况大部分都不定义,也就是jar类型。

8.2.<scope>

Maven因为执行一系列编译、测试和部署运行等操作,在不同的操作下使用的classpath不同,依赖范围就是用来控制依赖与三种 classpath(编译classpath、测试classpath、运行classpath)的关系。

用来指定被依赖资源的依赖范围,可选配置有 compile、test、provided、runtime、system、import,若不指定则默认 compile。

  1. compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven 依赖,对于编译、测试、运行三种classpath 都有效。
  2. test:测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此类依赖。典型的例子是JUnit,它只有在编译测试代码及运行测试的时候才需要。
  3. provided:已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效(对运行的classpath无效)。典型的例子是 servlet-api, 编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引人一遍。
  4. runtime:运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行class-path有效,但在编译主代码时无效(对编译的classpath无效)。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。
  5. system:系统依赖范围。该依赖与三种 classpath 的关系,和 provided 依赖范围完全一致。但是,system 范围的依赖不会从 maven 仓库下载,而是从本地文件系统获取,使用 system 范围的依赖时必须通过 元素显式地指定依赖文件的路径。由于此类依赖不是通过 Maven 仓库解析的,而且往往与本机系统绑定,可能造成构建(构建的产物有:classes和artifact)的不可移植,因此应该谨慎使用。
  6. import:导入依赖范围,该依赖范围不会对三种 classpath 产生影响,该依赖范围只能与 <dependencyManagement> 元素配合使用,其功能为将目标pom.xml 文件中元素 <dependencyManagement> 的配置导入合并到当前 pom.xml 文件的元素 <dependencyManagement> 中。

在这里插入图片描述

8.3.<optional>

标记依赖是否可选的。

例如项目A依赖于项目B,项目B依赖于项目X和项目Y,B对于X和Y的依赖都是可选的,此时X和Y的项目的<optional>就是true,X和Y不会对A有任何影响,只会对B产生影响(也就是A依赖于B,X和Y不会传递依赖给A,如果A需要用到X或Y,需要显示声明出来这个依赖X或Y)。

8.4.<exclusions>

用来排除传递性依赖。可以包含一个或者多个<exclusion>元素。

8.5.<exclusion>

声明此元素的时候只需要指定groupId和artifactId即可,不需要version,因为Maven解析后的依赖中,不可能存在groupId和artifactId相同而version不同的两个依赖。

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jdbc</artifactId>
   <exclusions>
       <exclusion>
           <artifactId>spring-boot-starter-logging</artifactId>
           <groupId>org.springframework.boot</groupId>
       </exclusion>
   </exclusions>
</dependency>

9.<plugins>

位置在<project>下面,可包含多个<plugin>。

9.1.<executions>

配置插件的执行,下面可以包含多个<execution>,每个<execution>子元素用来配置一个执行任务,该配置中有id,phase,goals元素,分别表示任务ID,绑定到生命周期的哪个阶段,要执行的插件目标。

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-source-plugin</artifactId>
     <executions>
         <execution>
         	 <!-- 任务ID -->
             <id>attach-sources</id>
             <!-- 插件绑定到哪个生命周期的阶段 -->
             <phase>verify</phase>
             <goals>
             	 <!-- 要执行的插件的目标	 -->
                 <goal>jar-no-fork</goal>
             </goals>
         </execution>
     </executions>
 </plugin>

如上配置好之后,测试一下,执行mvn clean install(verify阶段在intall阶段之前执行),只截图相关部分,如下:
在这里插入图片描述
其实上面配置也可以取消verify,因为这个插件目标jar-no-fork默认配置到了生命周期package阶段,可以通过命令mvn help:describe查看,详细参考 Maven实战-1.maven命令。

10.<properties>

<properties>…<properties/>之间可以来定义Maven属性,例如定义一些jar包依赖的统一version,使用的地方直接用${versionName}即可。

<properties>
	<!-- 类似java.version的名称自己定义 -->
	<java.version>1.8</java.version>
</properties>

<!-- 引用Java.version -->
<dependencies>
	<dependency>
		<groupId>...</groupId>
		<artifactId>test1</artifactId>
		<version>${java.version}</version>
	</dependency>
	<dependency>
		<groupId>...</groupId>
		<artifactId>test2</artifactId>
		<version>${java.version}</version>
	</dependency>
</dependencies>

11.<repositories>

在此元素下,可以声明一个或多个<repository>,表示远程仓库。

<repositories>
    <repository>
    	<!-- 这里配置一个id为jboss,名称为JBoss..tory的远程仓库 -->
        <id>jboss</id>
        <name>JBoss Maven Repository</name>
        <!-- 指向仓库的地址,一般都基于http协议 -->
        <url>http://repository.jboss.com/maven2/</url>
        <!-- 开启远程仓库对发布(正式)版本的下载支持 -->
        <releases>
            <enabled>true</enabled>
        </releases>
        <!-- 关闭远程仓库对快照版本的下载支持 -->
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <layout>default</layout>
    </repository>
</repositories>

注意,任何一个<repositories>配置的远程仓库中,id必须是唯一的,尤其需要注意的是,Maven默认的远程仓库地址的id是central,如果其他仓库使用了此id,就会覆盖默认的远程仓库。

因为<releases>和<snapshots>的配置,Maven只会从此远程仓库下载正式版本的构件,不会下载快照版本的。

对于<releases>和<snapshots>的配置,除了<enable>,还包括另外两个子元素<updatePolicy>和<checksumPolicy>

  • updatePolicy:配置Maven从远程仓库检查更新的频率,默认的值是daily,表示Maven每天更新一次,其他可配置的值是:never(从不),always(每次构建都检查),interval:X(每隔X分钟检查一次)
  • checksumPolicy:配置Maven检查校验和文件的策略,当构件部署到Maven仓库时会同时部署对应的校验和文件,其他项目引用下载构件的时候,Maven会验证校验和文件,如果校验和验证失败,根据值进行操作,checksumPolicy的默认值是warn,Maven构建时会会输出警告信息,值是fail,Maven会让构建失败,值是ignore,使Maven完全忽略校验和错误。

如果配置的远程仓库需要用户名和密码,就需要在setting文件中进行认证信息的配置,参考Maven实战-3.setting.xml标签说明。

12.<distributionManagement>

将项目生成的构建部署到仓库中。

<distributionManagement>  
    <repository>  
        <id>nexus-releases</id>
        <name>releases repository</name>  
        <url>http://172.17.103.59:8081/nexus/content/repositories/releases</url>  
    </repository>  
    <snapshotRepository>  
        <id>nexus-snapshots</id>
        <name>snapshots repository</name>    
        <url>http://172.17.103.59:8081/nexus/content/repositories/snapshots</url>  
    </snapshotRepository>  
</distributionManagement> 

如上,<distributionManagement>中包含<repository> 和<snapshotRepository> 子元素,前者表示发布版本构件的仓库,后者表示快照版本构件的仓库。这两个元素下都需要id,name和url三个子元素,id为该远程仓库的唯一标识,name是为了阅读理解,关键的是url指向的仓库地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/192384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【linux】剖析底层——带你详细了解Linux内核源码的构成及其作用(1)

目录 一、arch文件 1.作用 2.arch文件下的子文件示意图 3.各个子文件的作用 &#xff08;1&#xff09;alpha &#xff08;2&#xff09;arc &#xff08;3&#xff09;arm &#xff08;4&#xff09;arm64 &#xff08;5&#xff09;cshy &#xff08;6&#xff09;…

8 加载数据集

文章目录前提知识了解数据集Mini-Batch常用术语DataLoader核心参数核心功能小tips课程代码实例课程来源&#xff1a; 链接课程文本部分来源&#xff08;参考&#xff09;&#xff1a; 链接以及&#xff08;强烈推荐&#xff09; Birandaの前提知识了解 enumerate函数 数据集 …

局域网中UTP连接,如何实现防止芯片损坏,防止信号产生各种误码,及实现CHIP之间的阻抗匹配

Hqst盈盛电子导读&#xff1a;局域网中UTP连接&#xff0c;如何实现防止芯片损坏&#xff0c;防止信号产生各种误码&#xff0c;及实现CHIP之间的阻抗匹配&#xff0c;浅谈网络滤波器作用一&#xff0c;在有线局域网中&#xff0c;计算机与服务器之间&#xff0c;计算机与路由器…

10、条件语句

目录 一、if语句的基本形式 1. if语句形式 2. if…else语句形式 3. else if语句形式 二、if的嵌套形式 三、条件运算符 四、switch语句 1. switch语句的基本形式 2. 多路开关模式的switch语句 一、if语句的基本形式 在if语句中&#xff0c;首先判断表达式的值&#x…

【BetterBench】2023年美赛辅导

通知 2023年美赛快开始啦&#xff0c;提醒大家比赛信息&#xff0c;比赛期间我会全称提供辅导&#xff0c;包括建模方案、实现代码&#xff01; 可以参考往年所有建模比赛&#xff0c;本人开源的建模方案及实现代码 2020-2023年所有数学建模竞赛专栏 报名信息 1.辅助报名截止…

【异常】前端Babel提示 Support for the experimental syntax ‘jsx‘ isn‘t currently enabled

一、报错内容 17:33:41 - Building for production... 17:34:13 ERROR Failed to compile with 5 errors5:34:09 PM 17:34:13 17:34:13 error in ./src/layout/components/Sidebar/Item.vue?vue&typescript&langjs& 17:34:13 17:34:13 Syntax Error…

《流浪地球2》看不懂?根服务器、权威解析,专业科普来了

随着《流浪地球2》的上映&#xff0c;关于国产硬科幻电影的话题也火爆起来&#xff0c;片中各种脑洞大开&#xff0c;科技设定可圈可点&#xff0c;例如量子计算机、脑机接口、太空电梯等。从专业角度来看&#xff0c;作为国产科幻大片之光的《流浪地球2》为了保证真实性确实狠…

二叉平衡树 之 红黑树 (手动模拟实现)

目录 1、红黑树的概念 2、红黑树的性质 3、红黑树节点的定义 4、红黑树的插入 5、红黑树验证 代码汇总 6、红黑树的删除&#xff08;了解&#xff09; 7、红黑树的应用 8、红黑树 VS AVL树 1、红黑树的概念 红黑树&#xff0c;就是一种特殊的二叉搜索树&#xff0c;每个…

MySQL详解(四)——高级 2.0

性能分析 Explain 使用EXPLAIN关键字可以模拟优化器&#xff08;不改变查询结果前提下&#xff0c;调整查询顺序&#xff0c;生成执行计划&#xff09;执行SQL查询语句&#xff0c;从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈 功能&#x…

ECharts线性渐变色示例演示(2种渐变方式)

第003个点击查看专栏目录Echarts的渐变色采用了echarts.graphic.LinearGradient的方法&#xff0c;可以根据代码中的内容来看如何使用。线性渐变&#xff0c;多用于折线柱形图&#xff0c;前四个参数分别是 x0, y0, x2, y2, 范围从 0 - 1&#xff0c;相当于在图形包围盒中的百分…

PTA L1-025 正整数A+B(详解)

前言&#xff1a;本期是关于正整数AB的详解&#xff0c;内容包括四大模块&#xff1a;题目&#xff0c;代码实现&#xff0c;大致思路&#xff0c;代码解读&#xff0c;今天你c了吗&#xff1f; 题目&#xff1a; 题的目标很简单&#xff0c;就是求两个正整数A和B的和&#xf…

用户使用苹果AirTag来追踪宠物存在风险,苹果Find My功能用处广

苹果的 AirTag 不失为追踪宠物的一种便捷方式&#xff0c;这样宠物即便挣脱宠物圈或者其它方式丢失&#xff0c;都可以通过“Find My”方式追踪定位。正如《华尔街日报》所指出的&#xff0c;这种方式也存在 AirTag 被宠物吞食的风险。 AirTag 的直径为 1.26 英寸&#xff0c…

【Faster R-CNN】之 Resize_and_Padding 代码精读

【Faster R-CNN】之 Resize_and_Padding1、前言&#xff1a;2、resize_image_and_bbox1&#xff09;先对图像做resize处理2&#xff09;再对 bounding box 做resize处理3、padding_images代码1、前言&#xff1a; 在上一篇文章 【Faster R-CNN】之 Dataset and Dataloader 代码…

Linux网络:传输层之UDPTCP协议

文章目录一、端口号1.端口号范围划分2.常用命令二、UDP 协议1.格式2.特点3. UDP 的缓冲区4. UDP 使用注意事项5.基于 UDP 的应用层协议三、TCP 协议1.格式2.确认应答机制3.超时重传机制4.连接管理机制三次握手四次挥手5.滑动窗口6.流量控制7.拥塞控制8.延迟应答9.捎带应答10.面…

PyQt5利用Qt Designer制作一个可以拖动获取文件信息的页面

前言 本篇在讲什么 用pyqt5制作一个简单的程序&#xff0c;拖动文件或脚本可以读取文件信息 本篇适合什么 适合初学PyQt5的小白 本篇需要什么 对Python语法有简单认知 对Qt有简单认知 依赖Pycharm编辑器 本篇的特色 具有全流程的图文教学 重实践&#xff0c;轻理论&…

[Golang实战]整理Golang忽略的问题

整理Golang忽略的问题参考资料1.WaitGroup与GoRoutine的竞速2.Mutex互斥锁和RWMutex互斥读写锁3.poll,select,epoll4.何时栈和堆?5.GoRoutine合理使用6.GoRoutine优雅退出6.1data channel关闭通知退出6.2exit channel关闭通知退出6.3context超时或取消通知退出6.4WaitGroup/Er…

IPWorks EDI 2022.0.8381 for NET Crack

IPWorks EDI基于用于安全 EDI 通信&#xff08;AS2、SFTP、OFTP、RosettaNet、MLLP 等&#xff09;的领先 EDI-INT 协议&#xff0c;IPWorks EDI 库包含促进安全 EDI 消息传递以及 EDI 映射、翻译和验证&#xff08;X12、 EDIFACT、HL7、TRADACOMS、VDA、XML 和 JSON&#xff0…

golang/安装

golang中文官网 https://golang.google.cn/ golang下载 安装 一路next 配置 配置值说明GOROOTD:\ProgramFiles\golanggolang安装目录PATHD:\ProgramFiles\golang\bingolang命令路径GO111MODULEon开启go.mod功能&#xff0c;go.mod是go官方依赖包管理工具GOPROXYhttps://go…

【FPGA笔记系列7】时序逻辑电路基础D触发器

时序逻辑电路 组合逻辑与时序逻辑电路的本质区别:时序逻辑电路的输出和前一时刻的状态有关,组合逻辑电路的输出只和当前的输入有关 与非门RS锁存器的缺陷:当SR从00变到11时,状态不稳定! 电路中小圈圈表示低电平有效! 透明锁存器 R=1当En=1时,Q=S当En=0时,后面为RS触发器…

使用git合并两个不同项目代码

使用git合并两个不同项目代码 前言, 这里解决的是两个不同的项目, 因为不同项目那必然是两个不同的git仓库 都是不同的git仓库了那就更不可能是相同的分支了(即使分支名相同) 至于为什么会有这种业务情况出现, 我也不知道, 反正先学干就完了 这里图形化界面演示用的是idea自带的…