maven3实战读书笔记

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Maven简介是什么?Isasoftwareprojectmanagementandcomprehensiontool.项目管理工具是基于POM概念(工程对象模型)[设计重复、编码重复、文档重复、构建重复,maven最大化消除了构建的重复][与XP:简单、交流与反馈;测试驱动开发、十分钟构建、持续集成、富有信息的工作区]功能:1)规范构建系统,项目构建,自动化(标准化)构建构建工具(清理、编译、测试、生成报告、打包、部署),而且是跨平台的。抽象构建过程,提供构建任务实现。2)依赖管理:[在这开源的年代里,几乎任何Java应用都会借用一些第三方的开源类库,这些类库都可以通过依赖的方式引入到项目中来。随着依赖的增多,版本不一致、版本冲突、依赖臃肿等问题都会接踵而来。Maven提供了一个优秀的解决方案:]通过一组坐标maven能够找到任何一个Java类库。3)项目信息管理:管理原本分散在各个角落的项目信息:项目描述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址。。。4)自动生成项目站点,获得项目文档、测试报告、静态分析报告、源码版本日志报告。。。5)中央仓库:提供一个免费的中央仓库,在其中集合可以找到任何的流行开源类库。通过一些Maven的衍生工具(如Nexus),可以对其进行快速地搜索。只要定位了坐标,Maven就能够帮我们自动下载。相关内容:1)maven的安装、配置、基本使用2)坐标和依赖、中央仓库、maven仓库、生命周期、插件、聚合与集成3)nexus建立私服、使用maven进行测试、使用Hudson进行持续集成、4)使用maven构建web应用、maven的版本管理、maven的灵活构建、生成项目站点和maven的m2eclipse插件5)maven和archetype插件Java领域构建管理的解决方案发展:IDEMake|Ant+IvyMaven================================================参考官方document:“”几乎都能找到。Windows环境下,在用户目录C:\DocumentsandSettings\Administrator下,默认情况下,.m2/repository存放Maven本地仓库。所有的Maven构件(artifact)都被存储到改仓库中,以便重用。Maven根据一套规则来确定任何一个构件在仓库中的位置。也可以自定义本地仓库位置Maven安装与配置设置HTTP代理有的时候公司由于安全因素考虑,要求你使用通过安全认证的代理访问因特网。所以要为Maven配置HTTP代理,才能让它正常访问外部仓库,以下载所需要的资源。Pingrepo1.maven.org——indexcentral|代理服务器:218.14.227.1973128测试是否畅通setting.xml里的proxies元素插件eclipse的maven插件m2eclipse地址:核心mavenintegrationforeclipse还有一些额外组件:为方便与其他工具如Subversion进行集成,地址:查看eclipse是否已经支持创建Maven项目File-New-Other里面有maven一项Maven安装最佳实践1)设置MAVEN_OPTS,运行mvn命令实际上是执行了Java命令,既然是运行Java,那么Java命令可用的参数也在运行mvn命令时可用。通常需要设置MAVEN_OPTS值为:-Xms128m–Xmx512m因为Java默认的最大可用内存往往不够满足maven运行的需要。2)配置用户范围的settings.xml一般最佳实践:把M2_HOME/conf/settings.xml文件复制到~/.m2/settings.xml3)不使用IDE内嵌的MavenMaven使用入门编写pom-编写主代码-编写测试代码-打包和运行-使用archetype生成项目骨架-m2eclipse简单使用Make——Makefile;Ant——build.xml;Maven——pom.xml;POM:projectobjectModel项目对象模型,定义项目的基本信息,用于描述项目如何构建,声明项目依赖等等。项目的骨架:mvnarchetype:generate用于创建项目的骨架:--HelloMaven|----pom.xml|----src|-----main|------java/该目录下存放项目主代码|------resources|-----test|------java/默认的测试代码目录|------resources|-----target|-----classes|-----test-classes|-----surefire|-----surefire-reports|--------包名.类名.txt|--------Test-包名.类名.xml|-----maven-archiver|---------pom.properties|-----XXXX-版本.jar|-----original-XXX-版本.jar[官方插件使用:“”]1)Mvncleancompile:clean:clean,resources:resources,compiler:compiler2)Mvncleantest:clean:clean,resources:resources,compiler:compiler,resources:testResources,compiler:testCompiler,surfire:test3)mvncleanpackage:jar:jar4)mvncleaninstall:install:install5)java–jarxxx.jar还可以配置字符encoding坐标和依赖Maven坐标元素包括:groupId,artifactId,version,packaging,classifier。1)groupId:定义当前Maven项目隶属的实际项目。例如org.sonatype.nexus的groupId,org.sonatype表示Sonatype公司建立的个非盈利性组织,nexus表示Nexus这一实际项目。2)artifactId:定义实际项目中的一个Maven项目(模块),推荐做法:使用实际项目名称作为artifactId的前缀。3)version:定义Maven项目当前所处的版本。Maven还定义了一套完成的版本规范,已经快照的概念。4)packagin:定义Maven项目的打包方式,默认jar5)classifier:帮助定义构建输出的一些附属构件。附属构件与主构构件对应,例如Java文档和源代码(nexus-indexer-2.0.0.jar,nexus-indexer-2.0.0-javadoc.jar,nexus-indexer-2.0.0-sources.jar)。该元素不能直接定义。项目构件的文件名与坐标相对应,一般的规则:artifactId-version[-classifier].packaging。Type:依赖的类型,对应于项目坐标定义的packaging。大部分情况下,该元素不必声明,其默认值为jar依赖范围scope依赖范围就是用来控制依赖与这三种classpath(编译calsspath,测试classpath,运行classpath)的关系。1)compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试和运行3中classpath都有效。典型的例子是spring-core,在编译、测试和运行的时候都需要使用该依赖。2)test:测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用该类依赖。典型的例子是JUnit,它只有在编译测试代码及运行测试的时候才需要。3)provided:已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但是在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍。4)runtime:运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码无效。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。5)system:系统依赖范围。该依赖与三种classpath的关系,和provided依赖访问完全一致。但是,使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,故应谨慎使用。6)import:导入依赖范围。。。。。。scope编译测试运行democompileOOOSpring-coretestOJUnitprovidedOOservlet-apiruntimeOOJDBC驱动实现systemOO本地的,jre传递性依赖:不用在使用SpringFramework的时候就不用去考虑它依赖了什么,也不用担心多余的依赖。Maven依赖会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引用到当前的项目中。右边是第二依赖compiletestprovidedruntimecompilecompile--runtimetesttest--testprovidedprovide-providedprovidedruntimeruntime--runtime依赖调解:解决传递性依赖造成的问题,需要清楚的知道该传递性依赖时从哪条依赖路径引入的。原则:1)路径最近者优先;2)第一声明者优先。可选依赖:可选依赖是不传递的。可选类似单选框,比如A-B,B-Y(可选),B-X(可选),需要A显示声明X或Y的依赖。例子:B是一个持久层隔离工具包,它支持多种数据库,包括MySQL,PostgreSQL等,在构建工具包的时候,需要这2种数据库的驱动程序,但是在使用这个工具的时候,只会依赖一种数据库。optionaltrue/optional表示依赖是可选依赖。排除依赖:exclusionsexclusion/exclusion/exclusions归类依赖:使用常量${},properties变量值/变量/properites优化依赖:mvndependency:list:查看当前项目的已解析依赖mvndependency:tree:在已解析依赖的基础上,查看依赖树,能看到某个依赖时通过哪条传递路径引入的mvndependency:analyze[usedundeclareddependencies,Unuseddeclareddependencies]仓库1)何为Maven仓库坐标和依赖是任何一个构件在Maven世界中的逻辑表示方式;而构件的物理表示方式是文件,Maven通过仓库来统一管理这些文件。在Maven世界中,任何一个依赖、插件或者项目构建输出,都可以称为构件。2)仓库的布局路径与坐标的大致对应关系:groupId/artifactI

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功