网站备案怎么做超链接,简单网页源代码,地板网站模板,iis添加网站 别名MavenMaven简介仓库坐标Maven项目构建依赖管理生命周期及插件插件模块拆分与开发聚合继承属性版本管理资源配置多环境开发配置跳过测试私服Maven简介
Maven的本质时一个项目管理工具#xff0c;将项目开发和管理过程抽象成一个项目对象模型(POM) POM(Project Object Model)将项目开发和管理过程抽象成一个项目对象模型(POM) POM(Project Object Model)项目对象模型 maven作用
项目构建提供标准的跨平台的自动化项目构建方式依赖管理方便快捷的管理项目依赖的的资源(jar包)避免资源间的版本冲突问题统一开发结构提供标准的统一的项目结构
仓库
仓库用于存储资源包含各种jar包 仓库分类
本地仓库自己电脑上存储资源的仓库连接远程仓库获取资源远程仓库非本地电脑上的仓库为本地仓库提供资料 中央仓库Maven团队维护存储所有资源的仓库私服部门/公司范围内存储资源的仓库从中央仓库获取资源 私服的作用 保存具有版权的资源包含购买或自主研发的jar 中央仓库的jar都是开源的不能存储具有版权的资源 一定范围内共享资源仅对内部开放不对外共享
坐标
坐标Maven中的坐标用于描述仓库中资源的位置 坐标地址https://repo1.maven.org/maven2/ 仓库地址https://mvnrepository.com/
坐标组成
groupId定义当前Maven项目隶属组织名称aritfactId定义当前Maven项目名称version定义当前项目版本号packaging定义改项目的打包方式
Maven坐标的作用 使用唯一标识唯一性定位资源位置通过该标识可以将资源的识别与下载工作交互由机器完成。
本地仓库位置 默认位置登录用户名所在目录下的.m2文件夹中
localRepository${user.home}/.m2/repository/localRepository自定义位置
localRepositoryD:\maven\repository/localRepository默认仓库位置
repositoriesrepositoryidcentral/idnameCentral Repository/nameurlhttps://repo.maven.apache.org/maven2/urllayoutdefault/layoutsnapshotsenabledfalse/enabled/snapshots/repository
/repositories在seting文件中配置阿里云镜像仓库
mirrors!--配置具体的仓库的下载镜像--mirror!-- 此镜像的唯一标识符用来区分不同的mirror元素 --idnexus-aliyun/id!-- 对哪种仓库进行镜像简单说就是替代哪个仓库 --mirrorOfcentral/mirrorOf!-- 镜像名称 --nameNexus aliyun/name!-- 镜像URL --urlhttp://maven.aliyun.com/nexus/content/groups/public/url/mirror
/mirrorsMaven项目构建
Maven构建命令使用mvn开头后面添加功能参数可以一次执行多个命令使用空格分隔。
命令释义mvn complie编译mvn clean清理mvn test测试mvn package打包mvn install安装到本地仓库
1.项目编写成功后执行mvn install命令 2.执行mvn test命令先编译后测试保存测试结果 3.执行mvn package命令 先执行编译测试后编译再test最后执行打包指令 4.执行mvn install命令执行编译测试打包最后将jar包安装到本地仓库 maven命令创建工程
mvn archetype:generate-DgroupId{project-packaging} -DartifactId{project-name} -DarchetypeArtifactIdmaven-archetype-quickstart-DinteractiveModefalse创建java工程
mvn archetype:generate -DgroupIdcom.itheima -DartifactIdjava-project -
DarchetypeArtifactIdmaven-archetype-quickstart -Dversion0.0.1-snapshot -
DinteractiveModefalse创建web工程
mvn archetype:generate -DgroupIdcom.itheima -DartifactIdweb-project -
DarchetypeArtifactIdmaven-archetype-webapp -Dversion0.0.1-snapshot -
DinteractiveModefalsemaven配置Tomcat7运行插件
buildpluginsplugingroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat7-maven-plugin/artifactIdversion2.1/versionconfigurationport80/port 端口path//path 路径/configuration/plugin/plugins
/build添加maven运行配置可以debug运行
依赖管理
依赖指当前项目运行所需的jar一个项目可以设置多个依赖。
依赖配置
!-- 设置当前项目所依赖的所有jar--
dependencies!— 设置具体的依赖--dependency!— 依赖所属群组id--groupIdjunit/groupId!— 依赖所属项目id--artifactIdjunit/artifactId!— 依赖版本号 --version4.12/version/dependency
/dependencies依赖传递(相对概念)
直接依赖在当前项目中通过依赖配置建立的依赖关系间接依赖被依赖的资源依赖其他资源当前项目间接依赖其他资源 依赖传递冲突问题
路径优先当依赖中出现相同的资源时层级越深优先级越低层级越低优先级越高。声明优先当资源在相同层级被依赖时配置顺序靠前的覆盖配置顺序靠后的特殊优先当同级配置了相同资源的不同版本后配置的覆盖先配置的 可选依赖对外隐藏当前所依赖的资源不透明通过设置
dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionoptionaltrue/optional
/dependency排除依赖主动断开依赖的资源被排除的资源无需指定版本通过设置
dependencygroupIdcom.heima/groupIdartifactIdproject03/artifactIdversion1.0.-SNAPSHOT/versionexclusionsexclusiongroupIdlog4j/groupIdartifactIdlog4j/artifactId/exclusion/exclusions
/dependency依赖范围 依赖的jar默认情况可以在任何地方使用可以通过scope标签设定其作用范围 作用范围
主程序范围有效(main文件夹范围内)测试程序范围有效(test文件夹范围内)是否参与打包(package指令范围内)
scope主程序测试代码打包范例comile(默认)YYYlog4jtestYjunitprovidedYYservlet-apiruntimeYjdbc
依赖范围传递性 带有依赖范围的资源在进行传递时作用范围将收到影响
生命周期及插件
maven构建生命周期描述的是一次构建过程经历了多少个事件。
maven对项目构建的生命周期划分为3套
clean清理工作default核心工作例如编译测试打包部署等site产生报告发布站点
clean生命周期
pre-clean执行一些需要再clean之前完成的工作clean移除所有上次构建生成的文件post-clean执行一些需要再clean之后立刻完成的工作default构建生命周期
default构建生命周期 site构建生命周期
pre-site执行一些需要在生成站点文档之前完成的工作site生成项目的站点文档post-site执行一些需要在生成站点文档之后完成的工作并且为部署做准备site-deploy将生成的站点文档部署到特定的服务器上
插件
插件与生命周期内的阶段绑定在执行到对应生命周期时执行对应的插件功能默认maven在各个生命周期上绑定有预设的功能通过插件可以自定义其他功能
定义哪个生命周期执行哪个插件
buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-source-plugin/artifactIdversion2.2.1/versionexecutionsexecutiongoalsgoaljar/goal #对源码打包/goalsphasegenerate-test-resources/phase #插件执行时期/execution/executions/plugin/plugins
/build模块拆分与开发
聚合
聚合聚合用于快速构建maven工程一次性构建多个项目/模块。 创建一个空模块打包类型定义为pom
packagingpom/packaging定义当前模块进行构建时关联的其他模块名称
modulesmodule../ssm_controller/modulemodule../ssm_service/modulemodule../ssm_dao/modulemodule../ssm_pojo/module
/modules继承
通过继承可以实现在子工程中沿用父工程中的配置避免子工程中依赖版本冲突。 在子工程中声明其父工程坐标与对应的位置。 1.父工程编写
!--1.在父工程中定义依赖管理 --
dependencyManagement!-- 具体的依赖 --dependencies!--spring 环境--dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactId!--版本--version5.1.9.RELEASE/version/dependency!--也可以添加自己的工程模块依赖--!--...--dependencies
dependencyManagement!--插件管理类似--buildpluginManagement!--设置插件--plugins!--具体的插件配置--plugingroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat7-maven-plugin/artifactIdversion2.1/versionconfigurationport80/portpath//path/configuration/plugin/plugins/pluginManagement/build2.在子工程中定义依赖关系无需声明依赖版本版本参照父工程中依赖的版本
!--1.在子工程中声明其父工程坐标与其对应的位置 --
parentgroupIdcom.itheima/groupIdartifactIdssm/artifactIdversion1.0-SNAPSHOT/version!-- 填写父工程的pom文件相对路径 --relativePath../ssm/pom.xml/relativePath
/parent
!--版本 --
modelVersion4.0.0/modelVersion
!--项目名称打包方式 --
!--groupIdcom.itheima/groupId与父版本保持一致 --
artifactIdssm_pojo/artifactId
packagingjar/packaging!--2.在子工程中定义依赖关系无需声明版本 --
dependencies!--spring环境 --dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactId/dependency
/dependenciesbuild!--设置插件--plugins!--具体的插件配置--plugingroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat7-maven-plugin/artifactId/plugin/plugins
/build继承的资源 继承与聚合
作用 聚合用于快速构建项目继承用于快速配置 相同点 聚合与继承的pom.xml 文件打包方式均为pom可以将两种关系制作到同一个pom文件中聚合与继承均属于设计型模块并无实际的模块内容 不同点 聚合是当前模块中配置关系聚合可以感知到参与聚合的模块有哪些继承是子模块中配置关系父模块无法感知哪些子模块继承了自己
属性
自定义属性 等同于定义变量方便统一维护。 定义自定义属性
propertiesspring.version5.1.9.RELEASE/spring.versionjunit.version4.12/junit.version
/properties调用
dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion${spring.version}/version
/dependency
dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion${junit.version}/version
/dependency内置属性 使用maven内置属性快速配置
${basedir}
${version}调用 groupIdcom.itheima/groupIdartifactIdssm/artifactIdversion1.0-SNAPSHOT/versionpackagingpom/packaging!--声明此处进行依赖管理--dependencyManagement!--具体的依赖--dependencies!--添加自己的工程模块依赖--dependencygroupIdcom.itheima/groupIdartifactIdssm_pojo/artifactIdversion${version}/version/dependency/dependencies/dependencyManagementSetting属性 使用Maven配置文件setting.xml中的标签属性用于动态配置 调用格式
${settings.localRepository}Java系统属性 读取Java系统属性 调用格式
${user.home}系统属性查询方式mvn help:system 环境变量属性 读取环境变量属性 调用格式
${env.JAVA_HOME}版本管理
SNAPSHOT快照版本 项目开发过程中为方便团队成员合作解决模块间相互依赖和时时更新的问题开发者堆每个模块进行构建的时候输出的临时版本叫做快照版本(测试阶段版本)快照版本会随着开发的进展不断更新 RELEASE发布版本SNAPSHOT快照版本 项目开发到进入阶段里程碑后向团队外部发布较为稳定的版本这种版本所对应的构建文件是稳定的即便进行后续的功能开发也不会改变当前发布版本内容这种版本为发布版本。
工程版本号约定
主版本.次版本.增量版本.里程碑版本主版本表示项目重大架构的变更如spring5相较于spring4的变更次版本表示有较大的功能增加和变化或者全面系统地修复漏洞增量版本表示有重大漏洞的修复里程碑版本表明一个版本的里程碑(版本内部)。这样的版本同下一个正式版本相比相对来说不是很稳定有待更多的测试。
资源配置
定义资源文件引用pom属性集中统一管理
1.pom.xml文件修改设置文件路径
!--1.定义变量--
propertiesjdbc.urljdbc:mysql://127.2.2.2:3306/ssm_db/jdbc.url
/properties
build
!--2.配置资源文件对应的信息支持使用属性动态设定路径开启加载pom属性过滤功能--!--配置资源文件对应的信息 ${project.basedir}项目基础路径--resourcesresourcedirectory${project.basedir}/src/main/resources/directoryfilteringtrue/filtering/resource/resources!--配置测试资源文件对应的信息--testResourcestestResourcedirectory${project.basedir}/src/test/resources/directoryfilteringtrue/filtering/testResource/testResources
/build2.资源文件修改使用${属性名}引用pom属性
jdbc.drivercom.mysql.jdbc.Driver
jdbc.url${jdbc.url}
jdbc.usernameroot
jdbc.passworditheima多环境开发配置 1.定义多环境
!--创建多环境--profiles!--定义具体的环境生产环境--profile!--定义环境对应的唯一名称--idpro_env/id!--定义环境中换用的属性值--propertiesjdbc.urljdbc:mysql://127.1.1.1:3306/ssm_db/jdbc.url/properties!--设置默认启动--activationactiveByDefaulttrue/activeByDefault/activation/profile!--定义具体的环境开发环境--profileiddep_env/idpropertiesjdbc.urljdbc:mysql://127.2.2.2:3306/ssm_db/jdbc.url/properties/profile/profiles2.使用多环境配置打包使用哪个环境
跳过测试
跳过测试环节的应用场景
整体模块功能未开发模块中某个功能未开发完毕单个功能更新调试导致其他功能失败快速打包
跳过测试
命令行执行的指令生命周期必须包含测试环节
mvn 指令 –D skipTests
mvn install –D skipTests跳过一些测试
mvn clean install -DskipTestsMyTest1,MyTest2指定执行某些测试
mvn test -DtestMyTest1,MyTest2idea界面跳过 pom.xml配置
plugin!--可省略--groupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactIdversion2.22.1/versionconfigurationskipTeststrue/skipTests!--设置跳过测试--includes !--包含指定的测试用例 --include**/User*Test.java/include/includes!--excludes!--排除测试用例 --exclude**/User*TestCase.java/exclude/excludes--/configuration
/plugin私服
Nexus是Sonatype公司的一款maven私服产品。 下载地址https://help.sonatype.com/repomanager3/download 下载解压后目录 在bin目录中输入nexus /run nexus启动 访问默认端口8081http://localhost:8081
仓库分类
宿主仓库hosted保存无法从中央仓库获取的资源按需存放资源的仓库(以上线/开发中) 自主研发的资源第三方非开源项目比如oracle-jdbc 代理仓库proxy 代理远程仓库通过nexus访问其他公共仓库例如中央仓库阿里云仓库 仓库组group将若干个仓库组成一个群组(可以是宿主仓库也可以是代理仓库)简化配置仓库组不能保存资源属于设计型仓库便于取资源
进入页面提示默认密码位置之后修改密码 进入首页 创建仓库 选择类型 添加到public群组中 上传组件 RELEASE版本SNAPSHOT版本会做一个版本校验需要统一 查看 Idea环境中资源上传和下载
setting.xml配置本地仓库访问私服的权限(下载地址)
serversserveridheima-release/idusernameadmin/usernamepasswordadmin/password/serverserveridheima-snapshots/idusernameadmin/usernamepasswordadmin/password/server
/serverssetting.xml配置本地仓库来源为私服
mirrorsmirroridnexus-heima/idmirrorOf*/mirrorOfurlhttp://localhost:8081/repository/maven-public//url/mirror
/mirrors配置当前项目访问私服上传资源的保存位置(pom.xml文件)
distributionManagementrepositoryidheima-release/idurlhttp://localhost:8081/repository/heima-release//url/repositorysnapshotRepositoryidheima-snapshots/idurlhttp://localhost:8081/repository/heima-snapshots//url/snapshotRepository
/distributionManagement发布资源到私服命令
mvn deploy