maven强制更新依赖us实力强吗?管理的咋样呢?

51CTO旗下网站
Maven是什么?回顾Java社区的变革
Maven是一套项目管理框架,但这并不是Maven的全部。本文对Maven是什么进行了一番比较详细的描述,并对Maven的价值进行了极高的评价,认为它是Java社区的一次变革。
作者:姜晓东 译来源:CSDN博客| 10:45
大家应该都知道Maven是一种Java技术,是Ant的进化,并且在Java社区中引发了一场变革。Maven提供了一套软件项目管理的综合性方案.无论是编译,发布,文档还是团队协作,Maven提供了必要的抽象,它鼓励重用,并做了除了软件构建以外的许多工作.
然而,究竟Maven是什么?它就是一个工具么?
Maven是什么
Maven是一套项目管理框架,但这并不是Maven的全部.它是Maven作者能想得到的最显而易见的三句话定义.但是这个名字是个毫无意义的抽象,它并没有表达出Maven的强大功能和复杂性.太多的技术人员经常使用三四个关键词,来描述复杂的课题,并且重复的使用诸如"project management"和"enterprise software start"而没有能表达出其具体的含义.
当某人想要了解Maven是什么时,他们通常会问"到底Maven是个什么东东?”,然后他们期待着一个短小的,概述的回答,"嗯,它是一个构建工具,或者是一个脚本框架". Maven无法使用乏味的,毫无意义的单词来解释清楚.它是一个思想,标准以及软件的综合体,并且几乎不可能去提取出一个定义为一个简单的,概述性的定义.创新的思想往往很难用语言表达清楚.如果你对Maven的一个全面的,丰富的定义感兴趣的话,你可以阅读本介绍.它会首先想你提供所要遵循的概念和理论. 如果你阅读本介绍,只是为了寻找某些内容来告诉你的主管的话,你可以现在就转到第二章去了.
如果Maven不是一个"项目管理框架",那它是什么呢? 下面是一种描述:Maven是标准、存储格式以及一些软件用以管理和描述项目。它为构建、测试、部署项目定义了一个标准的生命周期。它提供了一个框架,允许遵循Maven标准的所有项目,方便的重用公用的构建逻辑。Maven项目存在的Apache软件基金会,是一个开源社区,它开发的软件工具,基于一个通用的软件对象模型(Project Object Model),也就是POM。本书重点关注Maven项目的核心部分――Maven 2,一个非常好的工具,它大大简化了软件项目的管理流程。
你可能曾经期待过一个更为浅显易懂的答案,或许你捡起这本书是因为某人曾经告诉过你Maven是一个构建工具。别担心,Maven可以做一个你要寻找的构建工具,并且很多使用Maven作为另外的构建工具的开发者们,都得到了一个很好的经过调优的构建系统。当你打算将Maven作为“另一个构建工具”的时候,以这种有限的眼光去看待Maven,就如同去说Web浏览器不过是看看超文本罢了。
Maven以及与其相关的技术,开始在Java社区产生了一种变革。
除了解决浅显易懂,以及诸如简化构建、文档、发布以及部署的流程等问题以外,Maven也带来了越来越引人注目的好处。
越来越多的项目和产品使用Maven作为他们项目管理的基础。它变得易于在项目和构建系统建立关系,并且在这个关系之上导航和做报告。Maven的标准格式允许为项目编码使用一种“Semantic Web”。Maven的规范和中央仓库为项目定义了一种全新的命名系统。使用Maven可以很容易的加入其他的依赖项,并发布你自己的组件。
那么,现在来回答当初的问题:Maven对于不同的人有不同的用途。它是一系列标准和解决问题的方式,而不仅仅只是一个软件。它是一种将一系列软件,使用统一的格式来描述,作为一个个互相依存的组件集合来处理的方式。它是个人和团体如何协作来开发软件系统的未来发展方向。一旦你理解了Maven,你就会奇怪以前没有它是怎么做的开发。
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条头条热点头条头条
24H热文一周话题本月最赞
讲师:41630人学习过
讲师:153930人学习过
讲师:785425人学习过
精选博文论坛热帖下载排行
在网络应用越来越复杂的今天,传统的网络应用已经不能满足企业和用户的需要,这就对网络管理员、信息管理部门提出了更高的要求。本书介绍了...
订阅51CTO邮刊403 Forbidden
403 Forbidden
You don't have permission to access the URL on this server.Powered by Tenginemavenus不知道咋样的呢?口碑是不是不错的呢_百度知道
mavenus不知道咋样的呢?口碑是不是不错的呢
我有更好的答案
全是宣传的吧,效果估计一般。
1条折叠回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。MaVenus皮肤管理培训,27年的产品和技术保证!你可信赖的合作伙伴。
日 11:47 来源:本站综合
  近日世界卫生组织的一项调查结果显示:目前中国有80%的职业女性的皮肤处于亚健康状态,像皮肤粗糙、干燥、黯淡、缺少光泽、长色斑、皱纹、色素沉积等现象在医学界都称之为亚健康。造成这些问题的因素有许多种,其中日常的环境污染是一方面,而对于职场女性来说,像办公室空气污染、电脑辐射、空调干燥风的侵害,作息的不规律,工作压力大,使用劣质或不适合的护肤品等更易变成亚健康皮肤。于是电脑前的皮肤保养,渐渐的成了办公室女性的烦心事。&
  从市场需求来看,现在女性对于自身的肌肤管理都很重视,一旦出现一些不好的情况,大多数人都会找美容院或者是选择护肤品来进行改善肌肤问题。因此在市场前景广阔的大背景下,不管是护肤品还是美容机构都如雨后春笋般涌现,而一些皮肤管理培训机构更是饱受创业者的欢迎,就如近两年倍受消费者追捧的Mavenus皮肤管理培训学院,就用自己的实力为机构背书,在众多竞争者中脱颖而出。&
  MaVenus皮肤管理培训学院,用实力说话&
  MaVenus成立于2012年,目前旗下有两个品牌,一个是和韩国Gratiasoo品牌公司合资的皮肤管理学院,主要经营项目是专业配套的皮肤管理技术培训及为各大美容院提供高端的Gratiasoo品牌护肤产品,Gratiasoo始于韩国是一个拥有27年历史的韩国院线专用高端品牌,旗下拥有53种高端型护肤产品。已帮助无数客户解决了各种皮肤问题;另一品牌是从印尼引进的Balijamu品牌,这品牌也已经有80年的历史。 主要做产后修复身体管理和印尼精油舒缓,瘦身身体管理等项目。有别于其他培训机构,Mavenus 结合了2大女性的需求的培训项目,提供一个全方位的皮肤及身体管理方案让以其合作的商家收获强大的竞争力。 &
  在皮肤管理技及培训方面,MaVenus通过邀请韩国大学皮肤科教授和研究生导师作为学院的授课老师,并开创了独特的体验式立体互动教学模式。这突破性的培训模式一经推出,便获得韩国“皮肤管理优秀培训机构”荣誉称号,而他们拥有的53种高端纯天然无公害Gratiasoo护肤产品,更是深受消费者的喜爱及业内的称赞;再加上资深的导师团队,让MaVenus如虎添冀般,在众多美容培训学院中挤身前列,倍受瞩目,也成了众多学员学习皮肤管理的首选培训学院。&
  加入MaVenus 的大家庭,走向成功巅峰!&
  学员张小姐是参加MaVenus皮肤管理培训中的一员,在接受记者的采访时,张小姐说:自己原本就开着一家小小的美容店,虽然之前也有参加过一些培训,但都没能学习到精髓。因为技术的不专业及护肤产品一直找不到好的,所以生意也一般。参加MaVenus皮肤管理培训是经朋友介绍的,MaVenus皮肤管理学院让张小姐觉得跟其它地方不同的是他们是直营的公司,有自己的产品线及雄厚的研发能力,可以从产品品质、售后及新品研发等多方面持支业者。她目前已学习好几期了,觉得十分棒,不管是护理手法还是Gratiasoo的功能性产品方面,都是她之前没有见过的。而且MaVenus还提供了整店输出的方案让一些0基础的人也能轻松的开启他们的事业。现在她已加入了Mavenus皮肤管理学院的大家庭。跟之前对比,客流量上升了两倍,她的店不但进行了扩充,还招了2个学徒。这些都让她十分有冲劲及成就感。&
  张小姐表示,选对培训和产品公司很重要,不但可以学到真本事,更是能让自己的事业走向巅峰!她极力推荐MaVenus 给想从事这行的女性创业者。有兴趣者可以上MaVenus 官网查阅。&
  据悉,选择MaVenus皮肤管理培训课程的学员来自各个层级,有零基础的家庭妇女、专业线美容院导购、连锁皮肤护理老板、国产品牌产品从业者及半道转行对美容有兴趣的人士。&
  MaVenus皮肤培训管理学院不仅让每一位学员学习到真正的技术及使用高端高品质的产品外,也收获了一份自信及与众不同的竞争力,实现可持续发展的能力。在他们的经营区域里树立了个人知名度与影响力,收获了好人缘。&
【编辑:成展鹏】
中国新闻社安徽分社版权所有:刊用本网站稿件,务经书面授权
主办单位:中国新闻社安徽分社 地址:安徽合肥梅山路8号 邮编:230021
联系电话:1
 投稿信箱:.cn博客分类:
"If I have seen further it is by standing on the shoulders of Giants" —— Isaac Newton ()
有人认为Maven是一个依赖管理工具,当然这种想法是错误的(确切的说Maven是一个项目管理工具,贯穿了整个项目生命周期,编译,测试,打包,发布...),但Maven给人造成这种错误的印象也是有原因的,因为Maven的依赖管理十分强大,用好了Maven,你不再需要面对一大堆jar感到头大,依赖冲突,无用依赖等问题也能够得到有效的防止和解决。本节介绍如何用好Maven的依赖管理。
最简单的依赖
依赖是使用Maven坐标来定位的,而Maven坐标主要由GAV(groupId, artifactId, version)构成。因此,使用任何一个依赖之间,你都需要知道它的Maven坐标,关于如何寻找Maven坐标,
一文可以帮助你。
最简单的依赖如:
&dependency&
&groupId&junit&/groupId&
&artifactId&junit&/artifactId&
&version&4.4&/version&
&/dependency&
上例中我们声明了一个对junit的依赖,它的groupId是junit, artifactId是junit, version是4.4。这一组GAV构成了一个Maven坐标,基于此,Maven就能在本地或者远程仓库中找到对应的junit-4.4.jar文件。
随着项目的增大,你的依赖越来越多,比如说你依赖了一堆spring的jar,有org.spring.framework:spring-core, org.spring.framework:beans, org.spring.framework:spring-web, org.spring.framework:spring-mock。它们的groupId是相同的,artifactId不同。为了管理其版本,你对它们进行过统一的升级,逐个的将version改成了最新版。但是,显然,当POM很大的时候你说不定会犯错误,而当版本不一致的时候,一些诡异的兼容性问题就可能出现。
对此,Maven有它的解决方案:
&dependencies&
&dependency&
&groupId&org.spring.framework&/groupId&
&artifactId&spring-core&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.spring.framework&/groupId&
&artifactId&spring-beans&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.spring.framework&/groupId&
&artifactId&spring-web&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.spring.framework&/groupId&
&artifactId&spring-mock&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&/dependencies&
&properties&
&spring.version&2.5&/spring.version&
&/properties&
这里我们定义了一个Maven属性,其名称为spring.version,值是2.5。在这个POM中,我们就能用${spring.version}的方式来引用该属性。我们看到,所有spring相关的依赖的version元素现在都成了${spring.version},当Maven运行的时候,它会自动用值2.5来替换这个引用。
当我们需要升级spring的时候,只要更改一个地方便可,而且,你现在能很高的保证所有的spring依赖包都是同一个版本。
依赖范围(scope)
本文的第一个例子其实是有漏洞的,对于Junit,一般来说你只有在运行测试的时候需要它,也就是说,它对于src/main/java的classpath没什么意义,并且,将Junit的jar文件打入最终的发布包也不是好事,这无谓的增加了发布包的大小。
其实我们应该这样做:
&dependency&
&groupId&junit&/groupId&
&artifactId&junit&/artifactId&
&version&4.4&/version&
&scope&test&/test&
&/dependency&
于是,junit对于主源码classpath不可用,对于测试源码classpath可用,不会被打包。
再举个例子,在开发javaee应用的时候我们一定会用到servlet-api,它对于主源码和测试源码都是必要的,因为我们的代码中会引入servlet-api的包。但是,在打包的时候,将其放入WAR包就会有问题,因为web容器会提供servlet-api,如果我们再将其打包就会造成依赖冲突,解决方案如下:
&dependency&
&groupId&javax.servlet&/groupId&
&artifactId&servlet-api&/artifactId&
&version&2.4&/version&
&scope&provided&/scope&
&/dependency&
将依赖范围设置成provided,就意味着该依赖对于主源码classpath,以及测试classpath可用,但不会被打包。这正是servlet-api所需要的。
这里归纳一下主要的依赖范围以及作用:
依赖范围(scope)
主源码classpath可用
测试源码classpath可用
compile 缺省值
需要注意的是,当我们没有声明依赖范围的时候,其默认的依赖范围是compile。
分类器(classifer)
GAV是Maven坐标最基本最重要的组成部分,但GAV不是全部。还有一个元素叫做分类器(classifier),90%的情况你不会用到它,但有些时候,分类器非常不可或缺。
举个简单的例子,当我们需要依赖TestNG的时候,简单的声明GAV会出错,因为TestNG强制需要你提供分类器,以区别jdk14和jdk15,我们需要这样声明对TestNG的依赖:
&dependency&
&groupId&org.testng&/groupId&
&artifactId&testng&/artifactId&
&version&5.7&/version&
&classifier&jdk15&/classifier&
&/dependency&
你会注意到maven下载了一个名为testng-5.7-jdk15.jar的文件。其命名模式实际上是&artifactId&-&version&-&classifier&.&packaging&。理解了这个模式以后,你就会发现很多文件其实都是默认构件的分类器扩展,如 myapp-1.0-test.jar, myapp-1.0-sources.jar。
分类器还有一个非常有用的用途是:我们可以用它来声明对test构件的依赖,比如,我们在一个核心模块的src/test/java中声明了一些基础类,然后我们发现这些测试基础类对于很多其它模块的测试类都有用。没有分类器,我们是没有办法去依赖src/test/java中的内容的,因为这些内容不会被打包到主构件中,它们单独的被打包成一个模式为&artifactId&-&version&-test.jar的文件。
我们可以使用分类器来依赖这样的test构件:
&dependency&
&groupId&org.myorg.myapp&/groupId&
&artifactId&core&/artifactId&
&version&${project.version}&/version&
&classifier&test&/classifier&
&/dependency&
理解了分类器,那么可供依赖的资源就变得更加丰富。
依赖管理(dependencyManagement)
当你只有一个Maven模块的时候,你完全不需要看这个部分。但你心里应该清楚,只有一个Maven模块的项目基本上只是个玩具。
实际的项目中,你会有一大把的Maven模块,而且你往往发现这些模块有很多依赖是完全项目的,A模块有个对spring的依赖,B模块也有,它们的依赖配置一模一样,同样的groupId, artifactId, version,或者还有exclusions, classifer。细心的分会发现这是一种重复,重复就意味着潜在的问题,Maven提供的dependencyManagement就是用来消除这种重复的。
正确的做法是:
1. 在父模块中使用dependencyManagement配置依赖
2. 在子模块中使用dependencies添加依赖
dependencyManagement实际上不会真正引入任何依赖,dependencies才会。但是,当父模块中配置了某个依赖之后,子模块只需使用简单groupId和artifactId就能自动继承相应的父模块依赖配置。
这里是一个来自于《Maven权威指南》的例子:
父模块中如此声明:
&modelVersion&4.0.0&/modelVersion&
&groupId&org.sonatype.mavenbook&/groupId&
&artifactId&a-parent&/artifactId&
&version&1.0.0&/version&
&dependencyManagement&
&dependencies&
&dependency&
&groupId&mysql&/groupId&
&artifactId&mysql-connector-java&/artifactId&
&version&5.1.2&/version&
&/dependency&
&dependencies&
&/dependencyManagement&
子模块中如此声明:
&modelVersion&4.0.0&/modelVersion&
&groupId&org.sonatype.mavenbook&/groupId&
&artifactId&a-parent&/artifactId&
&version&1.0.0&/version&
&artifactId&project-a&/artifactId&
&dependencies&
&dependency&
&groupId&mysql&/groupId&
&artifactId&mysql-connector-java&/artifactId&
&/dependency&
&/dependencies&
&/project&
你依赖配置越复杂,依赖管理所起到的作用就越大,它不仅能够帮助你简化配置,它还能够帮你巩固依赖配置,也就是说,在整个项目中,对于某个构件(如mysql)的依赖配置只有一种,这样就能避免引入不同版本的依赖,避免依赖冲突。
本文讲述了一些Maven依赖中重要的概念,并通过样例提供了一些最佳实践,如依赖归类,依赖范围,分类器,以及依赖管理。我的目的是通过浅显的例子讲述那些你实际工作中会需要了解的80%的内容,如果你需要更深入的了解,请参考
浏览 24937
浏览: 1379133 次
来自: 苏州
dao,util,servie,基础模块应该是maven项目, ...
深有体会,我这边已经 给项目坑死了,依赖关系太复杂,基本没人敢 ...
赞赞赞,生动有趣还说明问题
新的网站访问不了啊~~博主快更新
言简意赅,厉害
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 mavenus 贴吧 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信