maven中pom.xml中配置整理: groupId、artifactId、parent、dependency、dependencyManagement区别


maven中pom.xml中配置整理: groupId、artifactId、parent、dependency、dependencyManagement区别

<groupId>com.mycompany.commonmavengroupId> 
<artifactId>commonmavenartifactId> 
<version>0.0.1-SNAPSHOTversion> 
<packaging>jarpackaging> 
<name>common_mavenname>

groupId 定义了项目属于哪个组,举个例子,如果你的公司是mycom,有一个项目为myapp,那么groupId就应该是com.mycom.myapp.

artifacted 定义了当前maven项目在组中唯一的ID,比如,myapp-util,myapp-domain,myapp-web等。

version 指定了myapp项目的当前版本,SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。

packaging 打包的时候是默认打成一个jar包

name 声明了一个对于用户更为友好的项目名称,不是必须的,推荐为每个pom声明name,以方便信息交流。

-------------------------------------------------------------------------

A项目作为一个公共项目,被B项目和C项目所依赖,

B以parent的方式,

C以dependency的形式。

项目A 、 POM.XML的配置

<groupId>com.mycompanygroupId>
<artifactId>test1artifactId>
<version>1.0-SNAPSHOTversion>
<packaging>warpackaging>
<dependencies> <dependency> <groupId>org.apache.commonsgroupId> <artifactId>commons-lang3artifactId> <version>3.7version> dependency> dependencies>

项目B 、POM.XML的配置

<groupId>com.mycompanygroupId>
<artifactId>test15artifactId>
<version>1.0-SNAPSHOTversion>
<packaging>warpackaging>

<parent>
<groupId>com.mycompanygroupId>
<artifactId>test1artifactId>
<version>1.0-SNAPSHOTversion>
parent>

项目C 、 POM.XML的配置

<groupId>com.mycompanygroupId>
<artifactId>test20artifactId>
<version>1.0-SNAPSHOTversion>
<packaging>warpackaging>

<dependencies>
<dependency>
<groupId>com.mycompanygroupId>
<artifactId>test1artifactId>
<version>1.0-SNAPSHOTversion>
dependency>
dependencies>

最后可以发现:

B中,通过引用的项目A,可以使用A项目中中依赖的StringUtils的方法,但是不能调用A项目中自己定义的类和方法,

C中,通过依赖的A,两者却都可以调用。

然后说下dependencyManagement

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>3.2.7version>
dependency>
dependencies>
dependencyManagement>


<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
dependency>
dependencies>

1.在同一个pom文件下,如果中都对该jar做了依赖,以的为准,

    优先级高于。若前者没有对其依赖,而后者对其有依赖,则以后者为准。

    里只是声明依赖,并不实现引入.

2.在不同的pom文件中,存在父子相互依赖关系的,父项目的pom中中对该jar做了依赖,而子项目中又依赖了该jar,

    如果子项目中没有指定,则继承父项目中该jar的。如果子项目中指定了,以子项目的为准。

相关