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项目的远程仓库,他的下面可以添加多个,每一个都有它唯一的ID,一个描述性的name,以及最重要的远程仓库地址。如下:

<!-- 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>
posted @ 2023-11-25 11:18  右手一个柚  阅读(40)  评论(0编辑  收藏  举报