pom.xml文件标签说明
1、modelVersion:声明项目描述符遵循哪一个POM模型版本,模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。
指定当前maven模型的版本号,pom必须遵守一个模型。对于maven2、maven3来说设置4.0.0,因为在maven2,maven3中目前只有这一个模型。
<!-- 指定当前maven模型的版本号-->
<modelVersion>4.0.0</modelVersion>
2、groupId:公司或者组织的唯一标志,并且配置时生成的路径也是由此生成,如com.winner.trade,maven会将该项目打成的jar包存放到本地路径:/com/winner/trade。
此标签是项目组织唯一的标识符,定义了项目属于哪个组。一般写法为 域名.公司名,实际对应JAVA的包的结构,是main目录里java的目录结构。
<groupId>com.wgd</groupId>
3、artifactId:本项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的。
此标签是是项目的唯一的标识符,定义了当前maven项目在组中唯一的ID,实际对应的是项目名,就是项目根目录的名称。
<artifactId>springboot</artifactId>
4、version:指定了项目的当前版本,如果后面跟的有SNAPSHOT意为快照, 说明该项目还处于开发中,是不稳定的版本。
项目当前版本,格式为:主版本.次版本.增量版本-限定版本号>
<version>1.0.0</version>
5、name:项目的名称, Maven产生的文档用,可省略。
<!-- 项目的名称, Maven产生的文档用 -->
<name>wgd</name>
6、description:是关于这个项目的详细描述。
<description>XXXX系统</description>
7、url:项目主页的URL, Maven产生的文档用 ,可省略。
<!-- 项目主页的URL, Maven产生的文档用 -->
<url> http://www.baidu.com/banseon </url>
8、properties:属性配置,集中管理jar包版本,进行自定义标签。
<properties>
<java.version>1.8</java.version>
</properties>
9、dependencyManagement:依赖声明,在父项目的POM文件中定义,通过它来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。
dependencyManagement里只是声明依赖,并不实现引入。
如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom。
如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
<dependencyManagement>
。。。
</dependencyManagement>
10、dependencies:所有声明在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
<dependencies></dependencies>
11、dependency:每个此标签对应一个引用的jar包。
<dependency>
<!-- 此依赖包的公司或组织名称-->
<groupId>org.springframework.boot</groupId>
<!--此依赖包的名称或标识-->
<artifactId>spring-boot-dependencies</artifactId>
<!--此依赖包的版本号-->
<version>${springboot.version}</version>
<!--此依赖包的类型,默认为jar-->
<type>pom</type>
<!--此依赖包的使用范围,默认为compile,表示为当前依赖参与项目的编译、测试和运行阶段,属于强依赖,打包之时会打到包里去。-->
<!--import 这个是maven2.0.9版本后出的属性,import只能在dependencyManagement中使用,能解决maven依赖单继承问题,import依赖关系实际上并不参与限制依赖关系的传递性。-->
<scope>import</scope>
<!--可选依赖配置,如果为true,则表示该依赖不会被传递;不设置optional或者optional为false,表示传递该依赖。-->
<optional>true</optional>
</dependency>
scope 依赖项的适用范围:
- compile,缺省值,适用于所有阶段(编译、测试、运行),会随着项目一起发布。
- provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
- runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
- test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
- system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
- optional: 当项目自身被依赖时,标注依赖是否传递,用于连续依赖时使用。
可选依赖 optional
<project>
...
<dependencies>
<dependency>
<groupId>ProjectB</groupId>
<artifactId>Project-B</artifactId>
<version>1.0</version>
<!--可选依赖配置,如果为true,则表示该依赖不会被传递;不设置optional或者optional为false,表示传递该依赖。-->
<optional>true</optional>
</dependency>
</dependencies>
</project>
假设以上配置是项目A的配置,即:Project-A <-- Project-B。如果有一个新的项目C依赖A,即:Project-C <-- Project-A <-- Project-B,此时项目C就不会依赖项目B了(因为在Project-A中配置了Project-B不会被传递)。
如果项目C用到了涉及项目B的功能,那么就需要在pom.xml中重新配置对项目B的依赖。
12、modules:配置子模块
<modules>
<!--子模块的名称-->
<module>spring_boot_admin</module>
</modules>
13、repositories:用来配置maven项目的远程仓库,他的下面可以添加多个
<!-- repositories:远程仓库,用于配置当前项目下载依赖的Maven远程仓库地址,希望在当前项目中使用独立的Maven远程仓库,只对当前Maven项目有效。 -->
<repositories>
<repository>
<id>public</id>
<name>aliyun nexus</name>
<url>https://maven.aliyun.com/repository/public</url>
<!-- 告诉Maven可以从这个仓库下载releases版本的构件,不设置默认为true。 -->
<releases>
<!-- true或者false表示该仓库是否可下载某种类型构件(发布版,快照版)。 -->
<enabled>true</enabled>
</releases>
<!-- 告诉Maven不要从这个仓库下载snapshot版本的构件,禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用。当然如果你想使用局域网内组织内部的仓库,你可以激活snapshot的支持 -->
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
注意:如果pom.xml文件中设置的repositories配置不起作用,请检查maven的配置文件(conf下的任意一个settings.xml文件)里是否含有<mirrorOf>*</mirrorOf>
的<mirror>
配置。
maven查找依赖库的顺序为:应该是先找当前项目的repository,然后找本地配置文件(conf下的任意一个settings.xml文件),最后找中央仓库。
不生效的原因就出在mirrorOf节点了,如果写*
会覆盖掉所有的,不管是哪个repository,最后都被这个镜像所覆盖掉了,导致pom文件中的repository不生效了。
所以尽量不要配置mirrorOf为*
,或者改成<mirrorOf>*,!repo1</miiroOf>
即匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。
如果没有配置<mirrorOf>*</mirrorOf>
,就去检查配置文件(conf下的任意一个settings.xml文件)里是否有<profile>
并在其中设置了<repository>
,该<profile>
还被激活了<activeProfile>xx</activeProfile>
,这个优先级是比较高的,有了这个,本地项目配置的repository就不起作用了。
14、pluginRepositories:插件仓库,用于配置当前项目所用插件的远程仓库地址,针对的是maven命令需要的插件(比如clean、install)。
<!-- pluginRepositories:插件仓库,用于配置当前项目所用插件的远程仓库地址,针对的是maven命令需要的插件(比如clean、install)-->
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>aliyun nexus</name>
<url>https://maven.aliyun.com/repository/public</url>
<!-- 告诉Maven可以从这个仓库下载releases版本的构件,不设置默认为true。 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 告诉Maven不要从这个仓库下载snapshot版本的构件,不设置默认为true。-->
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
15、build配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<!-- 在原始Maven打包形成的jar包基础上,进行重新打包,新形成的jar包不但包含应用类文件和配置文件,而且还会包含应用所依赖的jar包以及Springboot启动相关类(loader等),防止有些文件打包不进去。-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>