????????Maven 是 Apache 软件基金会唯一维护的一款自动化构建工具,专注于服务Java平台的项目构建和依赖管理。
????????首先会去本地仓库寻找,然后会去公司的私服仓库寻找,一般私服仓库存的都是公司自己开发的 jar 包,最后会去 由Apache 团队来维护中央仓库寻找,一旦在一个地方找到就不再寻找。?
????????通常情况下,我们利用?groupId、artifactId、version?标签来确认这个依赖的唯一坐标?
<groupId>:企业网址反写+项目名
<artifactId>:项目名-模块名
<version>:当前版本
<groupId>com.juejin.business</groupId>
<artifactId>juejin-image-web</artifactId>
<version>1.0.0-SNAPSHOT</version>
?
clean 移除所有上一次构建生成的文件
validate:验证工程是否正确,所有需要的资源是否可用
compile:编译项目的源代码
test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
package:把已编译的代码打包成可发布的格式,比如 jar、war 等。
verify:运行所有检查,验证包是否有效且达到质量标准。
install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用
site 生成项目的站点文档
deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享
?
????????这个红色波浪线是因为依赖冲突,你看你的 fastjson 这个包,是不是显示 omitted for conflict with 1.2.47,这个意思就是你的 fastjson 包产生了冲突。我换个说法给你解释,就比如说你的项目中用了 A jar 包依赖 C jar 包, B jar 包也依赖 C jar包,Maven 就帮你下载了两个版本的 C jar 包,然后他们就产生了依赖冲突,这时Maven会依据依赖路径最短优先原则,来决定使用哪个版本的 jar 包,而另一个无用的jar包则未被使用,这就是所谓的依赖冲突。”
????????在大多数情况下,jar 包冲突是不会影响我们系统正常的运行的,但是不排除在一些极端的情景下会出现找不到类的异常?,我们作为一名严谨的程序员(为了 KPI 考虑),一定要把这个问题解决掉
? ? ? ? ?(1).通过?exclusions?标签实现。冲突项目依赖?juejin-image-web项目的时候,主动排除传递的juejin-convert-web项目依赖
<dependency>
<groupId>com.juejin.business</groupId>
<artifactId>juejin-image-web</artifactId>
<version>1.0.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.juejin.business</groupId>
<artifactId>juejin-convert-web</artifactId>
</exclusion>
</exclusions>
</dependency>
(2).?通过optional实现
<dependency>
<groupId>com.juejin.business</groupId>
<artifactId>juejin-convert-web</artifactId>
<version>1.0.0-SNAPSHOT</version>
<optional>true</optional>
</dependency>
?
?