Maven
Maven: 翻译为"专家"、"内行",是Apache下的一个纯Java开发的一个开源项目。
Maven是一个项目管理工具,使用Maven可以来管理企业级的Java项目开发及依赖的管理。
使用Maven开发,可以简化项目配置,统一项目结构。总之,Maven可以让开发者的工作变得更简单。
依赖管理:要明白依赖管理,首先要知道什么是依赖?
一个Java项目中往往会依赖一些第三方的jar包。比如JDBC程序中要依赖数据库驱动包,或者在使用c3p0连接池时,要依赖c3p0的jar包等。这时我们称这些Java项目依赖第三方jar包。
而所谓的依赖管理,其实就是对项目中所有依赖的jar包进行规范化管理。
1、不使用Maven,采用传统方式管理jar包的弊端:
(1)在一些大型项目中会使用一些框架,比如SSM或者SSH框架,而框架中所包含的jar包非常多(甚至还依赖其他第三方的jar包),如果这些jar包我们手动去网上寻找,有些jar包不容易找到,比较麻烦。
(2)传统方式会将jar包添加到工程中,比如Java工程中将jar包放在工程根目录或者放在自建的lib目录下;JavaWeb工程会将jar包放在:/WEB-INF/lib目录下,这样会导致项目文件的体积暴增(例如,有些项目代码本身体积可能仅仅几兆,而加入jar包后,工程的体积可能会达到几十兆甚至百兆)。
(3)在传统的Java项目中是将所有的jar包统一拷贝的同一目录中,可能会存在jar包文件名称冲突的问题!
(4)在进行项目整合时,可能会出现jar包版本冲突的问题。
(5)在传统java项目中通过编译(手动编译或者在eclipse保存自动编译)、测试(手动在main函数中测试、junit单元测试)、打包部署(手动打war包/手动发布)、运行(手动启动tomcat运行),最终访问程序。
2、使用Maven来管理jar包的优势:
(1)Maven团队维护了一个非常全的Maven仓库(中央仓库),其中几乎包含了所有的jar包,使用Maven创建的工程可以自动到Maven仓库中下载jar包,方便且不易出错。
另外,在Maven构建的项目中,如果要使用到一些框架,我们只需要引入框架的核心jar包,框架所依赖的其他第三方jar包,Maven也会一并去下载。
(2)在Maven构建的项目中,不会将项目所依赖的jar包拷贝到每一个项目中,而是将jar包统一放在仓库中管理,在项目中只需要引入jar包的位置(坐标)即可。这样实现了jar包的复用。
(3)Maven采用坐标来管理仓库中的jar包,其中的目录结构为【公司名称+项目/产品名称+版本号】,可以根据坐标定位到具体的jar包。即使使用不同公司中同名的jar包,坐标不同(目录结构不同),文件名也不会冲突。
(4)Maven构建的项目中,通过pom文件对项目中所依赖的jar包及版本进行统一管理,可避免版本冲突。
(5)在Maven项目中,通过一个命令或者一键就可以实现项目的编译(mvncomplie)、测试(mvn test)、打包部署(mvn deploy)、运行(mvn install)等。
还有发布到tomcat服务器中运行: mvn tomcat7:run。如果想实现上面的所有过程,只需要记住一个命令:mvn install
总之,使用Maven遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会优先使用Maven来构建项目.
远程仓库介绍
www.maven.org是maven的中央仓库,搜索一个框架后,找到某个版本,可以下载jar。
maven.aliyun.com是国内的maven中央仓库,是中央仓库的镜像,访问速度快。
框架排行
mvnrepository.com可以查看当前每个框架的的版本号及热度
使用maven前的准备工作
maven.apache.org可以下载maven
下载完成后解压修改conf文件夹下的settings.xml文件
如果访问速度过慢可以更改下载路径
开发工具配置maven
eclipse
idea
Maven的作用
- 统一开发规范与工具
- 统一管理jar包
Maven构建的普通Java项目,对源代码、单元测试代码、资源乃至后续需要的文件都有专门的目录规划。
上面的最后有一个pom.xml,这是Maven的核心配置文件,pom称为Project Object Model(项目对象模型),它用于描述整个Maven项目,所以也称为Maven描述文件。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--
Maven:Maven是一站式的项目管理工具,负责项目的构建/打包/测试/发布等工作。
知识点一:了解坐标的的作用
maven项目标识 组id/项目名称/版本号 称之为maven的坐标
1.maven中管理的jar包文件众多 如何有效的管理呢? 采用坐标的形式
2.在本地的仓库中jar包位置就是坐标的位置,maven工作通过坐标查找执行的jar
知识点二:maven中的jar包文件具有依赖的传递性
例子: A.jar ~~~ B.jar ~~~ C.jar ~~~ D.jar
maven。jar包的传递性如何实现?
当通过pom.xml文件添加依赖时,maven会根据坐标查找jar包文件。
当加载jar包完成之后,会解析当前的pom.xml文件,如果其中还有jar包的依赖项,则再次解析加载jar包
最终实现jar包的传递性
-->
<groupId>com.jt</groupId>
<artifactId>springboot_demo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_demo1</name>
<description>Demo project for Spring Boot</description>
<!--
作用:1.parent标签 集中定义了springboot所有依赖jar包的版本信息(version),由官网解决了jar包冲突性问题
2.本地仓库中没有该文件的jar包,parent表示的是一个聚合工程(定义:大工程下包含许多小工程)
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--maven项目的配置信息-->
<properties>
<!--指定了jdk版本信息-->
<java.version>1.8</java.version>
<!--跳过测试类运行 默认情况下程序打包会执行测试类,如果测试类有问题,则程序打包失败-->
<skipTests>true</skipTests>
</properties>
<dependencies>
<!--
手动依赖项 该依赖项被springBoot进行了高度整合
springBoot帮助大家动态的生成了配置项目,简化了配置的步骤,该配置称之为自动化的配置信息
spring-boot-starter springBoot自动化的启动项
开箱即用:只需要导入jar包简单的配置即可实现对应的功能
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--支持热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
<!--SpringBoot利用maven管理工具进行项目打包/发布/等操作-->
<!--如果没有这个build标签,我们打包发布时会提示(jar中没有主清单属性)-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我们可以在 <dependencies></dependencies>中添加依赖,但添加完后,需要等待(eclipse)/手动(idea)下载依赖到本地库,如果本地库存在,则会直接引入无需下载。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。