目录
- 回答零:项目管理工具(一语道破)
- 回答一:
- 回答二:
- 回答三:
- 回答四:
- 回答五:
- 核心功能
- 在没有 Maven 的情况下理解问题
- 它能做什么?
- 回答六:
- Maven可以解决什么问题之前我们先来想想我们开发过程中经常遇到什么问题
- maven所帮助我们解决的问题
- 什么是构建工具
- 回答七:
- 回答八:
回答零:项目管理工具(一语道破)
那么既然是项目管理工具,那肯定是有问题才需要管理啊,没有问题还需要管理吗,大家看下面这个问题
回答一:
假如你正在Eclipse下开发两个Java项目,姑且把它们称为A、B,其中A项目中的一些功能依赖于B项目中的某些类,那么如何维系这种依赖关系的呢? 在没有Maven时,需要用哪个项目中的哪些类,也就是用别人写好了的功能代码,导入jar包即可。所以这里也如此,可以将B项目打成jar包,然后在A项目的Library下导入B的jar文件,这样,A项目就可以调用B项目中的某些类了。
但这样做有几个缺陷,一是如果在开发过程中,发现B中的bug,则必须将B项目修改好,并重新将B打包并对A项目进行重编译操作。二是如果在完成A项目的开发后,为了保证A的正常运行,就需要依赖B(就像在使用某个jar包时必须依赖另外一个jar一样),这时可以选择将B打包入A中,或者将B也发布出去,等别人需要用A时,告诉开发者,想要用A就必须在导入Bjar包。但是两个都很麻烦,前者可能造成资源的浪费(比如,开发者可能正在开发依赖B的其它项目,B已经存储到本地了,在导入A的jar包的话,就有了两个B的jar),后者是我们常遇到的,找各种jar包,非常麻烦。
上面问题的描述,其实属于项目与项目之间依赖的问题[A项目使用SSH的所有jar,就说A项目依赖SSH],人为手动的去解决,很繁琐,也不方便,所以需要使用Maven来帮我们管理。
看了上面这个案例,我们知道了Maven的应用背景,那么回归到主题,Maven是什么?通俗点讲,Maven的核心功能便是合理叙述项目间的依赖关系,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包,maven项目,就是在java项目和web项目的上面包裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能了(通过pom.xml添加jar包)。 进一步细化探究,怎么通过pom.xml的配置就可以获取到jar包呢?pom.xml配置文件从何而来? 如果用pom.xml文件,那么该项目需要为Maven项目,怎么来创建Maven项目? 这时我们发现使用Maven,最终的目的就是学会如何创建maven项目,maven项目的结构是怎样,与普通java,web项目的区别在哪里,如何在pom.xml中配置获取到我们想要的jar包等等技术使用问题。
引用链接:
回答二:
我先不说maven,也不说java开发,先说做菜,你可能像做个红烧小排(HongshaoxiaopaiApp),你需要的材料是:
- 小排(xiaopai.jar),要小猪的(version=little pig){不了解jar的看这个}
- 酱油(jiangyou.jar),要82年的酱油(version=1982)
- 盐(yan.jar)
- 糖(tang.jar),糖要广东产的(version=guangdong)
- 生姜(shengjiang.jar)
- 茴香(huixiang.jar)
于是,你要去菜场买小排,去门口杂货店买酱油,买盐……可能你家门口的杂货店还没有1982年的酱油,你要去3公里外的农贸市场买……你买原材料的过程估计会很痛苦,可能买到的材料不是1982年的,会影响口感。
在你正式开始做小排前,你会为食材的事情,忙得半死。
现在有个超市出了个盒装版的半成品红烧小排,把生的小排,1982年的酱油,盐,广东产的糖等材料打包成一个盒子里,你回家只要按照说明,就能把红烧小排做出来,不用考虑材料的来源问题。
Maven就是那个超市,红烧小排就是你要开发的软件,酱油、盐什么的就是你开发软件要用到的jar包——我们知道,开发java系统,下载一堆jar包依赖是很正常的事情。有了maven,你不用去各个网站下载各种版本的jar包,也不用考虑这些jar包的依赖关系。Maven会给你搞定,就是超市的配菜师傅会帮你把红烧小排的配料配齐一样。
现在你应该明白Maven是做什么的了吧。
回答三:
首先,在目前的eclipse和intelliJ IDE中,创建MAVEN工程的代价非常小,在new project的时候就可以直接选择maven project而不是传统的java project。
创建了project之后,需要配置pom文件。如果你已经有过maven项目,只需要把原来的pom文件的内容复制过来即可,需要修改的部分是artifact,groupId这类用于把当前maven工程区别去过去的maven工程的参数。
还有就是为了干净整洁,可以把无用的dependency都删除。说到dependency,这真是我最喜欢的maven能力之一了。我们过去用普通的java project,如果需要引入第三方jar包,通常需要你自己去网上找到这个jar包下载到本地,再在build path(eclipse)或project structure(IntelliJ)里手动为当前project添加对这个jar包的依赖,才能import这个jar包,使用它的功能。然而有了pom文件,你需要在百度上输入“{jar包名称} dependency”就能在网上找到对应的代码。如下,只需要把这段代码放到pom文件的dependencies标签下,mavan自己就会去帮你下载这个jar包,随后直接在工程里使用这个jar包的功能就可以了,极大的节约了时间和精力。
回答四:
官方定义:Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件,它可以将项目开发和管理过程抽象成一个项目对象模型(POM)。开发人员只需做一些简单的配置,就可以批量完成项目的构建、报告和文档的生成工作。
回答五:
核心功能
Maven的核心功能是合理叙述项目间的依赖关系,通俗点 就是通过pom.xml文件的配置获取jar包不用手动的去添加jar包
在没有 Maven 的情况下理解问题
在项目开发过程中,我们面临着很多问题。下面讨论它们:
1)在每个项目中添加一组jar :对于struts、spring、hibernate框架,我们需要在每个项目中添加一组jar文件。它还必须包括 jars 的所有依赖项。
2)创建正确的项目结构:必须在servlet、struts等中创建正确的项目结构,否则将无法执行。
- 构建和部署项目:我们必须构建和部署项目,以便它可以工作。
它能做什么?
Maven 简化了上述问题。它主要执行以下任务。
1、它使项目易于构建
2、提供统一的构建流程(maven项目可以被所有maven项目共享)
3、它提供项目信息(日志文档、交叉引用源、邮件列表、依赖项列表、单元测试报告等)
4、Maven 的新特性很容易迁移
回答六:
那么说的通俗点就是这个表达:
Maven可以解决什么问题之前我们先来想想我们开发过程中经常遇到什么问题
1、我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突。
2、我们辛辛苦苦写好了 Java 文件,可是只懂 0 和 1 的白痴电脑却完全读不懂,需要将它编译成二进制字节码。好歹现在这项工作可以由各种集成开发工具帮我们完成,Eclipse、IDEA 等都可以将代码即时编译。当然,如果你嫌生命漫长,何不铺张,也可以用记事本来敲代码,然后用 javac 命令一个个地去编译,逗电脑玩。
3、世界上没有不存在 bug 的代码,计算机喜欢 bug 就和人们总是喜欢美女帅哥一样。为了追求美为了减少 bug,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。
4、再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型打包,如果是 web 项目,还需要将之发布到服务器,供人蹂躏。
maven所帮助我们解决的问题
以上的这些问题maven都把我们解决了,没错maven可以帮我们
1构建工程,
2管理jar,
3.编译代码,
4.自动运行单元测试,
5.打包
6.生成报表,
7.部署项目,生成web站点。
节选自大佬的博客
什么是构建工具
构建工具负责构建流程的一切。它执行以下操作:
生成源代码(如果使用自动生成的代码)
从源代码生成文档
编译源代码
将编译后的代码打包成 ZIP 文件的 JAR
在本地存储库、服务器存储库或中央存储库中安装打包的代码
回答七:
在传统项目中,我们的项目如果需要第三方提供的库就必须得去官网上下载,有了Maven我们只需要在pom文件中配置对应库的坐标,Maven则会自动的去中央仓库下载对应的第三方库,这就是Maven的依赖管理。
上图为某个pom.xml文件的依赖实例
回答八:
很多人都说Maven是管理jar包的,这个只是他众多功能中的一个,Maven的作用贯穿于项目的整个生命周期。
啥叫项目周期…项目开发、编译、测试、打包、集成测试、部署,这些就是项目的生命周期,所以Maven可以协助开发、编译、测试、打包、集成测试、部署,它都可以做!(其实真正做的不是Maven,它只是找了帮手去做这些事情,下面会讲到)
我们经常使用的管理jar包的功能:有一个中央仓库,存了好多好多jar包,每个jar包不同的版本都存了。你想用什么jar包,只需要在Maven的配置文件中(pom.xml)配置一下,写好用什么jar包,什么版本即可,Maven会自动帮你下载jar包;你依赖的jar包如果还依赖其他jar包的话,它也可以帮你下载下来。(这也是简单的介绍下功能,实际上比这个要复杂很多)
Maven还是一个依赖插件()执行的框架,Maven不做实际的工作,每个任务实际上是由插件完成。
插件非常多,就不一一介绍了。
可以看出来,mvn就是一个集成商,提供了很多插口,你想要什么功能,比如你想做集成测试,那么你就告诉mvn你要做集成测试(pom.xml文件中配置),mvn就帮你把集成测试的组件插到插孔里面了,然后你执行一个mvn xxx的命令,系统就可以跑集成测试了。