1、Maven原理与实践2024/5/21 周二1大纲何为Maven构建,依赖管理,项目信息聚合Maven核心概念坐标,依赖,仓库,生命周期,插件Maven最佳实践创建、打包、发布、版本管理项目实战Nexus(Todo)M2eclipse(Todo)Q&A2024/5/21 周二2何为Maven?依赖管理工具springslf4jhadooporg.springframework:spring-core:3.2.4org.slf4j:slf4j-api:1.7.5org.hibernate:hibernate-core:4.2.5:中央中央仓储2024/5/21 周二3何为Maven?构建工具高度
2、自动化跨平台丰富的可重用组件标准化清理清理编译测试报告告打包打包部署部署2024/5/21 周二4何为Maven?项目信息聚合版本控制系统信息,缺陷跟踪系统信息,开发者信息,许可证信息项目站点:javadoc,测试覆盖,代码静态分析报告2024/5/21 周二5Maven核心概念坐标依赖仓库生命周期插件2024/5/21 周二6坐标groupId:com.sailing.sdpartifactId:sdp-coreversion:1.0.0-(SNAPSHOT/RELEASE)packaging:jar(war ear pom)classifier:jdk15(jdk14)com/sailin
3、g/sdp/sdp-core/1.0.0/sdp-core-1.0.0.jar2024/5/21 周二7坐标4.0.0com.sailing.sdpsdp-utils1.1.1-SNAPSHOTjarsdp-utils2024/5/21 周二8依赖org.springframeworkspring-core3.2.4.RELEASEmonscommons-lang33.1中央中央仓储2024/5/21 周二9依赖范围依依赖范范围(scope)对于主代于主代码classpath有效有效对于于测试代代码classpath有效有效被打包,被打包,对于运行于运行时classpath有效有效例子例子co
4、mpileYYYlog4jtest-Y-Spring-testprovidedYYServlet-apiruntime-YJdbc driver2024/5/21 周二10传递性依赖使用springcore的时候,不用考springcore依赖了什么万一出现问题的时候,不得不去了解springcore依赖了什么My-appSpring-coreCommon-loggingaspectjweaver2024/5/21 周二11依赖相关技巧 .1.1.2-SNAPSHOT org.springframework spring-webmvc$spring.version com.sailing.sd
5、p sdp-utils$sdp.version .org.springframework spring-core 3.2.4.RELEASE commons-logging commons-logging .依依赖归类依依赖排除排除2024/5/21 周二12依赖管理 4.0.0 com.sailing.sdp sdp-parent 1.0.0SNAPSHOT org.springside springside-core 3.2.4 4.0.0 com.sailing.sdp sdp-parent 1.0.0-SNAPSHOT sdp-core jar org.springframework
6、spring-core 父父项目目子子项目目sdp-ormsdp-util2024/5/21 周二13仓库(Repository)默认的,本地所Maven项目都复用一个本地仓库本地仓库从远程仓库(可配置)下载必要的构件中央仓库是唯一内置的远程仓库本地本地仓库/.m2/repository远程程仓库远程程仓库中央中央仓库http:/repo1.maven.org/maven2Project-AProject-BProject-2024/5/21 周二14仓库(Repository)local-repository public repositories http:/ true true loca
7、l-plugin-repository local plugin repository http:/ true true D:m2_repository添加添加远程程仓储更改本地更改本地仓储位置位置/.m2/settings.xml/.m2/settings.xmlPom.xml2024/5/21 周二15生命周期三套生命周期(clean,default,site)相互独立一套生命周期中,生命周期阶段前后依赖mvn 命令指向生命周期阶段Pre-cleancleanpost-cleancompiletestpackageinstalldeployPre-sitesitePost-siteSite
8、-deploymvn cleanmvn installmvn site2024/5/21 周二16Maven插件Maven本身是一个框架,实际的任务都由插件完成插件与生命周期阶段绑定,用户通过指定生命周期阶段就能够隐式的通过插件执行任务例如:打包的时候,能够执行生成源码包和javaDoc核心插件核心插件打包工具打包工具报告插件告插件工具工具clean、compiler、deploy、install、surefire、siteear、ejb、war、jar、rar、sourcechangelog、checkstyle、javadoc、jxr、pmd、antrun、assembly、gpg、hel
9、p、release、eclipse、idea2024/5/21 周二17Mvn命令行指定生命周期$mvn clean 清空项目的工作目录$mvn test 执行测试$mvn package 执行打包(jar war)$mvn install 将组件安装到本地仓储$mvn deploy 将组件部署到远程仓储$mvn site 生成项目站点信息指定插件目标$mvn javadoc:javadoc 生成项目的javadoc$mvn source:jar 将项目的源码生成jar 2024/5/21 周二18mvn命令行项目中常用命令角色角色命令命令功能功能开发人员$mvn clean清除工作空间$mv
10、n test执行单元测试实施人员$mvn package项目打包平台开发人员$mvn deploy项目发布2024/5/21 周二19Maven最佳实践场景通过maven骨架,创建一个名称为util的jar工程该工程包含:common-lang3、slf4j、logback三个组件编写一个isEmpty方法用于判断字符串是否为空将util组件进行打包,打包时生成源码发布util组件到远程仓储2024/5/21 周二20使用Maven创建项目$mvn archetype:generate DarchetypeCatlog=internal2024/5/21 周二21Pom.xml2024/5/2
11、1 周二22添加组件在远程仓储中查找组件http:/ 周二23Pom.xml在Pom.xml中添加插件2024/5/21 周二24Maven打包打包:将util工程打包成组件(war jar)$mvn package-Dmaven.test.skip=true$mvn install-Dmaven.test.skip=true2024/5/21 周二25Maven发布发布:将util组件发布到远程仓储$mvn deploy在远程仓储中查看util组件http:/ release http:/ snapshot http:/ 周二26版本管理规范1.3.4beta2.1.0.0SNAPSHOT&
12、1.4.1 20091030 124744 108处于开发中的不稳定版本方便及时的获得团队其它模块的状态Maven自动更新(by day),强制更新:U原则:不要依赖任何外部构建的SNAPSHOT版本主要版本主要版本发布布相相对次要次要版本版本发布布重要重要bug修复修复里程碑版里程碑版本:本:alpha2024/5/21 周二27项目实战大数据项目项目中使用lib包仓储中没有项目中使用的第三方组件;没有掌握将第三方组件上传到仓储中的方法;Assembly插件的使用方法不正确;编译不通过私服仓库中没有自主开发的组件;2024/5/21 周二28项目实战如何为项目添加组件2024/5/21 周二
13、29项目实战如何为项目添加第三方组件(ojdbc)2024/5/21 周二30项目实战如何在内外网隔离的环境下使用maven方式一:将本地仓储拷贝至内网环境的开发人员机器中;方式二:在内网环境中搭建nexus私服仓储服务,并确保私服仓储服务中有比较完整的组件2024/5/21 周二31项目实战如何将内部组件部署到远程仓储pom.xml中添加部署的目标地址执行mvn deploy命令进行部署 nexus-releases release http:/XXX snapshot http:/XXX 周二32后记培训材料Maven原理与实践.pptMAVEN.mmapMaven学习思维导图Maven+实战_12804356.pdf一本非常适合开发人员的maven书籍2024/5/21 周二33Q&A2024/5/21 周二34