Java的包管理与Maven

2020-04-27  本文已影响0人  EnochQin

前言:在Java的世界中,【包】是最基本的结构,因此包管理就是Java项目中的一件特别重要的事情。本文介绍的就是Java世界中的包管理,以及最流行的包管理工具Maven。


Java的包管理

要介绍Java的包管理,我们就要先知道什么是包:

包管理中的【包】指的是什么?

包的传递性依赖

什么是包管理

简单来说包管理的本质就是下面三点:

Maven的包管理

Apache Maven,是一个软件(特别是Java软件)项目管理自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

Maven是一个划时代的成就,必须强调,Maven远远不止是包管理工具,还是一个自动化构建工具。Java在经历了很多年的发展后,Maven的应运而生,是我们在庞大的Java项目中管理包不再是一件令人头疼的事情。

Maven —— 划时代的包管理

groupidartifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。

groupId一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称。域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。举个apache公司的tomcat项目例子:这个项目的groupId是org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,artifactId是tomcat。

比如我创建一个项目,我一般会将groupId设置为cn.enoch,cn表示域为中国,enoch是我的名字,artifactId设置为testProj,表示你这个项目的名称是testProj,依照这个设置,你的包结构最好是cn.enoch.testPro打头的,如果有个StudentDao,它的全路径就是cn.enoch.testProj.dao.StudentDao

拓展:语义化版本

5.0.0-M1 【milestone 里程碑】
5.0.0-RC1 【Release candiate,正式版本的候选版本】
alpha:内部版本
beta:公测版本
SNAPSHOT:快照版本,用于开发联调的包

Maven 包冲突及解决

什么是包冲突

简单的来说就是因为传递性依赖导致某一个包被引入了两次,在classpath中出现了两次,从而导致我们在运行Java程序时,classpath中后出现的那次引入的包不会被引入到项目中来。

包冲突可能会出现的异常

Maven传递性依赖的自动管理:

怎么解决呢?

如果两个发生冲突的包”距离“一样呢?

距离一样,怎么办

这张图,【C0.1】和【C0.2】具体相同,那么maven为了保证classpath同名包只有一个,就会选择最先声明的包,舍弃后者(比如先依赖的A,就会选择C0.1)

Maven的其他知识

scope

Maven查看依赖树

(完)

上一篇下一篇

猜你喜欢

热点阅读