佛山网站建设公司有哪,中囯联通腾迅,2016个人做淘宝客网站,正确的网址格式输入前言
Maven仅仅是个打包工具而已#xff0c;个人觉得没有太大必要花费在打包工具上#xff0c;这里就列举一下个人觉得会常用标签的使用就好了#xff0c;原理啥的基本就不太会去深度了解了#xff0c;如果以后遇到需了解Maven工作原理的工作的话#xff0c;到时候一定分…前言
Maven仅仅是个打包工具而已个人觉得没有太大必要花费在打包工具上这里就列举一下个人觉得会常用标签的使用就好了原理啥的基本就不太会去深度了解了如果以后遇到需了解Maven工作原理的工作的话到时候一定分享出来。
pom结构
前面那篇博客已经展示过了这里就在展示一下官网上也有文档可以查看链接Maven官网pom.xml parent标签
这个标签用的最多是在使用Spring Boot项目以及父子项目的用的最多
SpringBoot示例
parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.1.15.RELEASE/version
/parent父子项目示例 这里module标签意思就是该父项目有哪些模块的意思值为子模块的文件夹的名称而不是artifactId不然找不到对应的子模块而且在父模块中的packaging标签值为pom表示这是一个父类项目。
坐标
Maven中坐标是Jar包的唯一标识在pom.xml中指定坐标的标签元素包括groupId,artifactId,version,packaging
元素描述说明groupId定义当前模块隶属的实际Maven项目中小企业常常直接对应公司/组织artifactId定义实际项目中的一个模块唯一标识一个模块version定义当前项目所在的版本SNAPSHOT 表示不稳定的版本。 LATEST 指最新发布的版本可能是个发布版也可能是一个snapshot版。 RELEASE 指最后一个发布版。packaging定义Maven项目打包方式有jar(默认)、war、pom表示为父模块、maven-plugin当前项目为插件等.classifier附属构件(如javadoc、sources)须有附加插件的帮助
properties属性标签
这个标签里面可自定义标签属性也可覆盖默认标签属性示例
propertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingspring.version5.1.16.RELEASE/spring.version
/properties
....
dependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdversion${spring.version}/version/dependency
/dependencies
自定义属性可以在maven的生命周期中使用最常用的就是在default-resources中使用用来替换properties文件中的${}值。
Maven自己会有一些内置属性 ${basedir} 项目根目录 ${project.build.directory} 构建目录缺省为target ${project.build.outputDirectory} 构建过程输出目录缺省为target/classes ${project.build.finalName} 产出物名称缺省为${project.artifactId}-${project.version} ${project.packaging} 打包类型缺省为jar ${project.xxx} 当前pom文件的任意节点的内容 dependency依赖标签
这个标签下放的就是当前项目依赖jar的坐标。
如果我想引入一下MySQL的驱动包
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.16/versionscopecompile/scope
/dependency
这里有个依赖作用域scope一般有以下依赖范围
compile默认范围用于编译依赖的jar在打包时会包含进去 provided类似于编译但支持你期待jdk或者容器提供类似于classpath依赖的jar在打包时不会包含进去 runtime在执行时需要使用依赖的jar在打包时会包含进去test用于test任务时使用依赖的jar在打包时不会包含进去system需要外在提供相应的元素。通过systemPath来取得一般该作用域用来引入外部jar包
在使用system作用域的时候使用systemPath标签指定外部元素路径如 systemPath${project.basedir}/lib/sdk-1.0.jar/systemPath//项目根路径下 在依赖标签里面还有一个标签属性optional该标签默认值为false指的是父子项目之间的是否传递之前在看Mybatis源代码的时候下载下来后的pom.xml里面就会有这个标签如果父项目引入一个依赖并且optional标签设置为true的话那么子项目打包的时候也会打包进去如果设置为false的话那么就不会打包进去。
依赖冲突解决
在引入依赖的时候会存在一个问题就是依赖传递如果在项目中引入多个重复的依赖那么jvm只能拿到一个版本的依赖其他的版本的依赖就会被抛弃所以Maven在处理这个上是有一定的顺序的先看一下示例
如果有个项目pom.xml引入fastjson包的依赖如下 则取舍规则如下
1、路径最短原则product和customer里的fastjson引用路径较短路径为两步 ;pay项目里的fastjson引用路径较长路径为三步。因此pay中的fastjson被淘汰
2、同路径长度下谁先声明谁优先 product和customer中的fastjson路径相同那么就看在pom中是先声明product还是先声明customer谁先用谁的。
profiles标签
主要应用的场景开发环境和测试环境的配置是不一致的为了打包方便一般我们会将配置文件的写在一个properties文件中如下 在打包的时候指定是测试环境还是开发环境进行不同的打包实现这样的一个功能就是使用profiles标签了先将两种不同环境的数据录入到profiles标签中如下所示activeByDefault为默认配置 此定义即指当mvn命令执行时我们需要通过加上 -P dev或者-P test方式传入我们的需要指定的profile的iddev/test选择会导致properties里的变量值含义不同这个操作需要在build标签中添加一个资源复制 dependencyManagement标签
这个标签是作为版本号管理使用的基本上都是用于父项目中定义好全局统一的版本号在子项目中就只需要引入groupId以及artifactId了在SpringBoot的父模块中就是使用的这个作为统一管理的。 build标签
该标签主要是用来打包时做一些处理功能像资源文件的复制选择指定的插件以及最终打包的jar包名称等。
finalName
当前应用工程打包的jar名称 pluginManagement标签
当前标签和dependencyManagement的作用是一致在父模块当中定义好版本号在子模块当中直接引用即可 plugin标签
当前标签为插件标签在上篇博文当中已经提到了Maven生命周期中对应的执行插件有哪些而插件也是一个jar包所以引入也是需要通过坐标进行引入的示例如上。
后面我会发布一篇博客专门讲解Maven插件的。
distributionManagement
该标签是在Maven的deploy阶段即将当前项目推送到远程私服的仓库上以供于他人使用一般比较大型的公司都会有自己的私服仓库公司内部自己也会开发一些组件啥的开发完之后需推送到公司的私服仓库当中私服后面我也会有一片博客讲解这个东西在推送的过程中也可以指定推送哪种类型的仓库 还有两种常用的标签repositories和pluginRepositories用法如下 repositories即指定当前项目依赖引入jar使用的仓库地址如果在Maven的settings.xml中指定好镜像仓库和依赖仓库后这里其实是可以不需要指定的但是如果某些项目需要的依赖仓库不在settings.xml的配置文件里面可以在pom.xml中手动指定仓库。
pluginRepositories即指定当前项目插件依赖引入jar使用的仓库地址。功能同上。
mirrors
还有个settings.xml里面的镜像标签需要提一下Maven仓库镜像是会拦截所有只想仓库的路径转向到镜像当中的仓库即如果没有配置镜像的话那么Maven下载依赖包会直接去远程中央仓库中下载而如果配置了镜像那么就会被镜像拦截转发到镜像指定的仓库下载依赖和镜像标签一起使用的还有mirrorOf标签该标签是可以指定哪些仓库可以被镜像拦截
!--匹配所有仓库请求即将所有的仓库请求都转到该镜像上--
mirrorOf*/mirrorOf !--将仓库jcenter和repo2的请求转到该镜像上使用逗号分隔多个远程仓库。 --
mirrorOfjcenter,repo1/mirrorOf !--匹配所有仓库请求jcenter除外使用感叹号将仓库从匹配中排除。--
mirrorOf*,!jcenter/miiroOf !-- settings.xml中的仓库 --
repositoryidjcenter/idurlhttps://jcenter.bintray.comt/url
/repository
repositoryidrepo1/idurlhttps://repo1.maven.org/maven2/url
/repository
下面列举一些镜像地址 !-- 阿里云的镜像站--mirroridnexus-aliyun/idnameNexus aliyun/nameurlhttp://maven.aliyun.com/nexus/content/groups/public//url mirrorOfcentral/mirrorOf
/mirror
!-- maven官方运维仓库 --
mirror idrepo2/id nameMirror from Maven Repo2/name urlhttp://repo2.maven.org/maven2//url mirrorOfcentral/mirrorOf
/mirror
!-- maven在UK架设的仓库--
mirror idui/id nameMirror from UK/name urlhttp://uk.maven.org/maven2//url mirrorOfcentral/mirrorOf
/mirror
!-- JBoss的仓库 --
mirror idjboss-public-repository-group/id mirrorOfcentral/mirrorOf nameJBoss Public Repository Group/name urlhttp://repository.jboss.org/nexus/content/groups/public/url
/mirrorMaven不仅仅是以上的那些标签属性在此只是列出来个人觉得平常使用的比较多的标签。