Maven

1. 什么是Maven

乍一看,Maven看起来很多东西,但简而言之,Maven试图将模式应用于项目的构建基础架构,以便通过提供使用最佳实践的明确路径来提高理解力和生产力。Maven本质上是一个项目管理和理解工具,因此提供了一种帮助管理的方法:

  • 构建

  • 文档

  • 报告

  • 依赖

  • 供应链管理系统

  • 发布

  • 分配

2.Maven的哲学

Maven通常被许多人认为是构建工具。很多来到Maven的人最初都熟悉Ant,所以它是一个自然的联想,但Maven不仅仅是一个构建工具,而不仅仅是Ant的替代品。Maven与Ant完全不同。Ant只是一个工具箱,而Maven则是关于模式的应用,以实现显示可见性,可重用性,可维护性和可理解性的基础结构。

如果没有这些特征,多个人将很有可能在项目上一起高效地工作。没有可见性,个人不太可能知道另一个人已经完成了什么,因此很有可能有用的代码不会被重用。如果不重用代码,则很难创建可维护的系统。当每个人都在不断努力寻找构成项目的所有这些不同点点的地方时,任何人都很难理解整个项目。因此,您最终会遇到孤岛效应,共享知识的衰退以及团队成员之间相应程度的挫折感。当流程对每个人都不以相同的方式工作时,这是一种自然的影响。

Maven诞生于非常实际的愿望,即以相同的方式在Apache工作。因此,开发人员可以在这些项目之间自由移动,通过了解其中一个项目的工作方式,清楚地了解它们的工作原 如果开发人员花时间了解一个项目是如何构建它的,那么当他们转移到下一个项目时,他们就不必再次经历这个过程。同样的想法扩展到测试,生成文档,生成指标和报告,测试和部署。所有项目都具有足够的相同特征,了解Maven试图利用其一般的项目管理方法。在很高的层面上,所有项目都需要构建,测试,打包,记录和部署。当然,上述每个步骤都有无限的变化,但是这种变化仍然发生在明确定义的路径的范围内,而Maven试图以明确的方式向每个人呈现这条路径。明确路径的最简单方法是为人们提供一组模式,这些模式可以由项目中的任何人共享。

拉尔夫·约翰逊和唐·罗伯茨在“进化框架模式”中最喜欢的一句话:

人们通过从具体例子中概括出来来发展抽象。在没有实际开发运行系统的情况下,每次尝试在纸上确定正确的抽象都是注定要失败的。没有人那么聪明。框架是一种可重用的设计,因此您可以通过查看它应该是设计的东西来开发它。您看到的示例越多,您的框架就越通用。

我真的不知道最终的结果是什么样的,我只知道必须有更好的方法。但首先我知道我想:

  • 项目的模型,以便您可以在一个地方查找与项目相关的所有内容

  • 一个标准的目录结构,所以你不必去寻找图书馆,资源和文档

 其实上面的都是官方语言,对我这种理解能力不强的人其实举例子更合适

   假如你正在Eclipse下开发两个Java项目,姑且把它们称为A、B,其中A项目中的一些功能依赖于B项目中的某些类,那么如何维系这种依赖关系的呢?

   很简单,这不就是跟我们之前写程序时一样吗,需要用哪个项目中的哪些类,也就是用别人写好了的功能代码,导入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包,非常麻烦(有了maven就不一样了)

    我们开发一个项目,或者做一个小demo,比如用SSH框架,那么我们就必须将SSH框架所用的几十个依赖的jar包依次找出来并手动导入,超级繁琐。 

   上面两个问题的描述,其实都属于项目与项目之间依赖的问题[A项目使用SSH的所有jar,就说A项目依赖SSH],人为手动的去解决,很繁琐,也不方便,所以使用maven来帮我们管理

Maven的核心功能便是合理叙述项目间的依赖关系,通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包,而这里pom.xml文件对于学了一点maven的人来说,就有些熟悉了,怎么通过pom.xml的配置就可以获取到jar包呢?pom.xml配置文件从何而来?等等类似问题我们需要搞清楚,如果需要使用pom.xml来获取jar包,那么首先该项目就必须为maven项目,maven项目可以这样去想,就是在java项目和web项目的上面包裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能了(通过pom.xml添加jar包)。

  所以,根据上一段的描述,我们最终的目的就是学会如何在pom.xml中配置获取到我们想要的jar包,在此之前我们就必须了解如何创建maven项目,maven项目的结构是怎样,与普通java,web项目的区别在哪里,还有如何配置pom.xml获取到对应的jar包等等

pom.xml获取junit的jar包的编写

为什么通过groupId、artifactId、version三个属性就能定位一个jar包?

    加入上面的pom.xml文件属于A项目,那么A项目肯定是一个maven项目,通过上面这三个属性能够找到junit对应版本的jar包,那么junit项目肯定也是一个maven项目,junit的maven项目中的pom.xml文件就会有三个标识符,比如像下图这样,然后别的maven项目就能通过这三个属性来找到junit项目的jar包了。所以,在每个创建的maven项目时都会要求写上这三个属性值的。

看完上面这些再看看我绘制的图,估计能理解个八九不离十:

Maven(个人整理)(一,未完待续)的更多相关文章

  1. Java_数组, 懒得整理了 ---------------------> 未完, 待续

    待续 public class TestArray { public static void main(String[] args) { String[] s1 = {"双儿", ...

  2. 有关C,C++,C#, Java的图形图像处理类库 整理(未完待续)

    1.Java相关 1.1 Jzy3D Jzy3D 是一个Java的类库,用来绘制各种各样的三维图形,如下图所示: 下载地址:jzy3d-api,官网 1.2 Proscene 是一个用于创建交互式3D ...

  3. DP整理(未完待续)

    一.资源问题 T1 机器分配 已知条件:每家公司分配x台机器的盈利 令f[i][j]表示前i公司分配j台机器的最优解 转移:f[i][j]=max(f[i-1][j-k]+w[i][k]) 初始化:f ...

  4. ASP.NET MVC 系列随笔汇总[未完待续……]

    ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...

  5. 布隆过滤器(Bloom Filter) 未完待续

    布隆过滤器雏形 未完待续..... 计算错误率 现在有一个空额布隆过滤器, 过滤器里的bit array的大小是m. 咱来插入一个元素. 这次插入过程中的第一个hash函数会算出一个位置, 然后把这个 ...

  6. 从Socket入门到BIO,PIO,NIO,multiplexing,AIO(未完待续)

    Socket入门 最简单的Server端读取Client端内容的demo public class Server { public static void main(String [] args) t ...

  7. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

  8. 关于DOM的一些总结(未完待续......)

    DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.query ...

  9. 我的SQL总结---未完待续

    我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...

  10. virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)

    virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...

随机推荐

  1. ssh 报错Host key verification failed 或Ubuntu connect to serve 失败

    ssh 报错Host key verification failed  或Ubuntu connect to serve 失败  通常是因为没有装ssh sudo apt-get install  o ...

  2. php 获取数组深度的key

    1.数组 深度遍历 function fun($a,&$b) { foreach ($a as $k=>$val) { if (is_array($val)) { $b[]=$k; fu ...

  3. linux安装rabbitmq3.6.5

    一.准备依赖包 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ k ...

  4. Tomcat-servlet基础

    1.1 概念 运行在服务器上的小程序   定义了浏览器访问到(tomact)的规则 1.2 步骤 1.3 执行原理 1  当服务器 接收到客户端浏览器的请求后  会解析url地址  获得url路径   ...

  5. EOS踩坑记

    [EOS踩坑记] 1.每个account只能更新自己的contract,即使两个account的秘钥相同,也不允许. 如下,使用alice的权限来更新james的contract.会返回 Missin ...

  6. 9.22 keep studying

    项目要换用element组件了. element [http://element.eleme.io/1.4/#/zh-CN]是饿了么前端出品的一套基于Vue2.0的组件库,今天看了一下,确实简单好看. ...

  7. Sublime Text3快捷键大全

    选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数 ...

  8. Linux知识扩展一:执行前为什么加./

    转载:https://www.cnblogs.com/fortunel/p/8663669 1  ./表示当前路径,在执行可执行文件时,linux系统会从环境变量PATH中查找该文件的路径,但因为 L ...

  9. node.js 使用 net 模块模拟 websocket 握手,进行数据传递。

    websocket 是一种让浏览器与服务器之间建立持久的连接,并能进行双向数据传输的一种协议. websocket 属性应用层协议,基于tcp传输协议,并复用http的握手通道. 一.如何进行webs ...

  10. Android 记录点滴

    1:关于断点 设置断点点三角是进不去的,这个是类似c#的release 正式版, 点第二个红圈内的debug的那个按钮才可以   . 这个按钮可以让程序及时进入当前断点处 2:对于背景颜色 andro ...