本文共 5824 字,大约阅读时间需要 19 分钟。
转载自
Maven坐标
GroupId、artifactId和version构成了Maven的坐标(groupId和version可以从parent继承),指定了组件在Maven仓库中的位置。Maven中的每个组件都有一个坐标,通过这个坐标我们在自己的项目中可以设置对该组件的依赖。
------groupId:项目属于哪个组,往往和项目所在的组织或公司存在关联; ------artifactId:当前Maven项目在组中唯一的ID; ------version:定义当前项目的版本,如:1.0(-SNAPSHOT),SNAPSHOT表示快照,说明该项目还处于开发阶段,是不稳定版本; ------packaging:当我们有了groupId:artifactId:version作为地址后,还需要packaging为我们提供组件的类型,例如:<packaging>war</packaging>标识组件为一个war。如果packaging不指定,默认值为jar,当前可选值为:pom, jar, maven-plugin, ejb, war, ear, rar, par; ------classifier:可选,坐标也可以展示为groupId:artifactId:packaging:classifier:version。
POM关联
Maven的一个有力的地方就在于对项目关联的处理;包括依赖、继承和聚合(多模块项目)。
Dependencies
... junit junit 4.0 jar test true
------groupId、artifactId、version:依赖组件的坐标,如果当Maven通过这些坐标无法从中心仓库获取该组件时,可以通过下面的方法处理:
1、用安装插件安装本地依赖,在命令行中输入: mvn install:install-file -Dfile=non-maven-proj.jar -DgroupId=some.group -DartifactId=non-maven-proj -Dversion=1 -Dpackaging=jar 2、创建你自己的仓库,并部署它 3、设置依赖scope到system,并定义一个systemPath,但这个不推荐。 ------type:对应所以来的组件的packaging; ------scop:用于控制依赖的范围,有以下几种范围供选择 1、compile:编译依赖范围,默认,对于所有的classpath都是有效的; 2、provided:仅对编译和测试classpath有效; 3、runtime:编译时不需要,尽在运行时需要; 4、test:仅用于测试; 5、system:和provided类似,只是你需要提供JAR,组件不再在仓库中查找。 ------systemPath:当scop配置为system时就需要它了junit junit 4.0 jar system $(object.path)/lib/junit.jar true
------optional:设置为true,标识该依赖只对该项目有效,如果其他项目依赖该项目,该依赖将不会传递。
Exclusions
该配置告诉Maven你不想包含的该依赖的依赖(即,依赖传递的依赖)。
... org.apache.maven maven-embedder 2.0 org.apache.maven maven-core
也可以使用通配符,表示排除所有传递的依赖。
... org.apache.maven maven-embedder 2.0 * *
Inheritance
继承是一个有力的工具,在maven中使用继承时,需要为parent和aggregation(多模块)项目设置packaging为pom:<packaging>pom</packaging>,然后就子项目就可以继承该POM了。
org.codehaus.mojo my-parent 2.0 ../my-parent
relativePath是可选的,指定parent的搜索路径,如果配置了,Maven将首先搜索relativePath,然后本地仓库,最后远程仓库查找parentPOM。
POM就像Java对象最终都继承自java.lang.Object一样,所有的POM都继承自一个Super POM,你通过查ungjianyige最小化的pom.xml并在命令行中执行 mvn help:effective-pom来查看Super POM对你的POM的影响,下面是Maven 3.0.4的Super POM,该Super POM的位置在apache-maven-version\lib\maven-model-builder-version.jar\org\apache\maven\model\下面,文件名pom-4.0.0.xml。4.0.0 central Central Repository http://repo.maven.apache.org/maven2 default false central Central Repository http://repo.maven.apache.org/maven2 default false never ${project.basedir}/target ${project.build.directory}/classes ${project.artifactId}-${project.version} ${project.build.directory}/test-classes ${project.basedir}/src/main/java src/main/scripts ${project.basedir}/src/test/java ${project.basedir}/src/main/resources ${project.basedir}/src/test/resources maven-antrun-plugin 1.3 maven-assembly-plugin 2.2-beta-5 maven-dependency-plugin 2.1 maven-release-plugin 2.0 ${project.build.directory}/site release-profile performRelease true true maven-source-plugin attach-sources jar true maven-javadoc-plugin attach-javadocs jar true maven-deploy-plugin true
Dependency Management
dependencyManagement用于在parent项目定义一个依赖,如:
junit junit 4.0 jar compile true
然后从这个parent继承的POMs就能设置他们的依赖为:
junit junit
继承的POM的dependency的其它信息可以从parent的dependencyManagement中获得,这样的好处在于可以将依赖的细节放在一个控制中心,子项目就不用在关心依赖的细节,只需要设置依赖。
Aggregation(或者Multi-Module)
在多模块的项目中,可以将一个模块的集合配置到modules中。
my-project another-project
在这里列出的模块不需要考虑顺序,Maven将自己根据依赖关系排序。
Properties
Maven中的Properties就像Ant中的,可以在POM的任何地方通过${X}来返回属性的值,X就表Poperty。 存在以下5种不同的类型: 1、env.X:将返回环境变量的值,如:${env.PATH}返回PATH环境变量的值; 2、project.X:POM中的对应元素的值,'.'表示在POM中的路径,如:<project><version>1.0</version></project>可以通过${project.version}获取值; 3、settings.X:settings.xml中包含的对应元素的值,'.'表示路径,如: <settings><offline>false</offline></settings>可以通过${settings.offline}获取; 4、Java System Properties:所有可以通过java.lang.System.getProperties()获取到的属性在POM属性中都是可用的,如:${java.home}; 5、X:在POM的<properties />中设置的元素,如: <properties><someVar>value</someVar></properies>通过${someVar}获取。
转载地址:https://maokun.blog.csdn.net/article/details/104729904 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!