1.什么是maven:
maven是Java平台下的一款项目构建和依赖管理的自动化管理工具。
项目构建:将我们的源代码、配置文件变成可执行的war包或者jar包。
依赖管理:项目需要正常运行,必须依赖一些第三方的jar包,对于这些第三方的jar包的管理,可以认为就是依赖的管理。
Maven的作用主要体现在两个词上面:项目和管理。项目管理从技术上来理解,就是 Maven 为项目提供了一种让团队能够更科学地管理、构建项目的手段。我们可以用配置文件的方式对项目的描述、名称、项目版本号、项目依赖等信息进行描述,使我们的项目结构更加清晰。
并且,有一些项目需要依赖一些第三方项目的模块或组件来完成,那么 Maven 则提供了一种 Maven仓库 的概念。将这些依赖全部放到 Maven仓库中,其他项目如果想要使用这些依赖,直接到仓库中取即可,避免了到开源网站下载 jar 包资源的步骤。
Maven的优点:
1、原来的项目中需要的jar包必须手动“复制”、”粘贴” 到WEB-INF/lib 项目下,而借助Maven,可以将jar包仅仅保存在“仓库”中,有需要使用的工程只需要“引用”这个文件,并不需要重复复制到工程中。
2、原来的项目中所需要的jar包都是提前下载好的,而Maven在联网状态下会自动下载所需要的jar包。首先在本地仓库中找,找不到就在网上进行下载。
3、原来的项目中一个jar包所依赖的其他jar包必须手动导进来,而Maven会自动将被依赖的jar包导进来。
4、原来的项目一个项目就是一个工程,而借助Maven可以将一个项目拆分成多个工程。
Maven的缺点:
1.由于需要下载,导入等,导致加载缓慢,或者出现错误,和不稳定
2.缺少对Maven的文档描述(网上一大堆,但是没有标准)
3.中央存储库中的元数据不佳
4.POM.xml做为项目元数据的来源
maven常见的指令:
- mvn archetype:generate :创建 Maven 项目
- mvn compile :编译源代码
- mvn test-compile :编译测试代码
- mvn test : 运行应用程序中的单元测试
- mvn site : 生成项目相关信息的网站
- mvn clean :清除目标目录中的生成结果
- mvn package : 依据项目生成 jar 文件
- mvn install :在本地 Repository 中安装 jar
- mvn deploy:将jar包发布到远程仓库
- mvn eclipse:eclipse :生成 Eclipse 项目文件
maven依赖范围:
- compile:编译范围,指 A 在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在 编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。
- provided:provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,打包:比如:servlet-api,jsp-api 被 tomcat 容器提供。
- runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。
- test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用, 比如:junit。由于运行时不需要所以 test范围依赖不会被打包。
- system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR 文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用。
maven四大特性:
1.第一大特性:
依赖管理系统 maven为java世界引入了一个新的依赖管理系统jar包管理jar升级时修改配置文件即可,在java世界中,可以用groupid,artifactid,version组成的Coordination(做标)唯一标识一个依赖。
任何基于Maven构建的项目自身也必须定义这三项属性,生成的包可以是jar包,也可以是war包或者jar包。
①groupId:定义当前Maven项目隶属的实际项目--公司名称。
②artifactId:该元素定义实际项目中的一个Maven模块--项目名。推荐的做法是使用实际项目名称作为artifactId的前缀。比如:spring-bean,spring-webmvc等。
③version:该元素定义maven项目当前所处的版本。
2.第二大特性:
多模块构建 项目复查时dao service controller 层分离将一个项目分解为多个模块已经是很通用的一种方式。
在maven中需要定义一个parent POM作为一组module的聚合POM,在该POM中可以<modules>标签来定义一组子模块,parent POM不会有什么实际构建产生。而parent POM中的build配置以及依赖配置都会自动继承给子module。
3.第三大特性:
一致的项目构建 主要解决了我们在idea中和eclipse中创建的项目,目录可能不一样,但是如果使用了maven后,我们创建的项目目录都是一样的。 Maven在设计之初的理念就是Conversion over configuration(约定大于配置) ,其制定了一套项目目录结构作为标准的java项目结构,解决不同ide带来的文件目录不一致问题。
4.第四大特性:
一致的构建模型和插件机制如果我们需要tomcat服务器的时候,我们就把tomcat服务器的引进来。