maven 的 GAVP 及 pom.xml文件


  Maven 中的 GAVP 是指,GroupId、ArtifactId、Version、Packaging,
  
  其中前三个是必要的,Packaging是可选的,

  这四个属性,为每个项目在maven仓库做一个标识,方便maven软件对项目进行管理个相互引用

GroupId

GroupId:

  格式:com.{ 公司 / BU }.业务线.{ 子业务线 } ,最多4段

  如:com.taobao.tdd、com.alibaba.sourcing.mutilang、com.atguidgu.java

注:groupId,代表项目的组织或公司,不会频繁改变

ArtifactID

ArtifactID:

  格式:产品线名-模块名

  如:tc-client、uic-api、tair-tool、bookstore

注:artifactId,代表项目的具体模块或应用,不会频繁改变

Version

Version:

  版本号格式推荐:主版本号.次版本号.修订号

  主版本号:当做了不兼容api修改,或增加了能改变产品方向的新功能

  次版本号:当做了向下兼容的功能性新增(新增类、接口等)

  修订号:修复bug

  如:
    初始时:1.00、修改bug:.0.1、功能调整:1.1.1

注:版本号,在构建、部署过程中可能会频繁修改,特别是SNAPSHOT版本

Packaging

  Packaging:

    指示将项目打包成什么类型的文件,idea根据packaging的值,识别maven项目类型。

    packaging 为 jar 时(默认值),代表普通的java工程,打包后是.jar结尾的文件

    packaging 为 war 时,代表java的web过程,打包后是.war结尾的文件

    packaging 为 pom 时,代表不会打包,用来做继承的工程




pom.xml文件怎么用




<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>com.atguigugroupId>
    <artifactId>studyoneartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>warpackaging>



    声明项目属性,这些属性可以在POM文件的其他地方引用
    <properties>
        
        <jackson.version>2.16.2jackson.version>
        <junit.version>4.13.2junit.version>
        
        <maven.compiler.source>17maven.compiler.source>
        
        <maven.compiler.target>17maven.compiler.target>
        
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    properties>



    第三方依赖信息声明:
        dependencies:项目依赖信息的集合
            dependency:每个依赖项
                [gav]:依赖的信息,就是其他maven工程的[gav]

        第三方依赖信息怎么知道?
            1、maven的官网查询:https://mvnrepository.com
            2、maven的插件:maven-search
                安装后,在Tools的Maven-search即可看到

        扩展:
            1、版本号统一管理
            2、可选属性scope,引入依赖的作用域
                compile(默认作用域),在主代码、测试代码、打包、运行时都生效
                test作用域,仅在测试阶段生效,不会参与打包和运行
                runtime作用域,仅在运行时生效,不会参与编译
                provided作用域,在编译和测试阶段生效,但在打包时不会包含在最最终的部署包中
                总结:它是一种锦上添花的手段,如果掌握不好,就默认值即可,一定不会错
    <dependencies>

        依赖传递:导入A依赖后,会自动导入A依赖的依赖(comile dependenices)
                     简化依赖的导入,确保依赖的版本无冲突

             依赖冲突:发现已经存在的依赖,会终止依赖传递,避免循环依赖和重复依赖的问题

             依赖冲突的解决原则:
                第一原则:谁短谁优先(引用的路径长短)
                    A - C - B1.0
                    F - B2.0
                    此时导入的依赖是:A C F B2.0
                第二原则:谁上谁优先(dependenies的声明顺序)
                    A - B1.0
                    F - B2.0
                    此时导入的依赖是:A F B1.0

                练习:
                    A1.1 - B1.1 - C1.1
                    F2.2 - B2.2
                    pom.xml的声明为
                        F2.2
                        A1.1
                        B2.2
                    此时导入的依赖是:F2.2 A1.1 B2.2
                                   不会引入C1.1,只要发生冲突了,后续的依赖传递全部终止

        <dependency>
            定位信息 gav 三个属性是必须的
            <groupId>com.fasterxml.jackson.coregroupId>
            <artifactId>jackson-coreartifactId>
            <version>${jackson.version}version>
        dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.coregroupId>
            <artifactId>jackson-databindartifactId>
            <version>${jackson.version}version>
        dependency>

        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>${junit.version}version>
        dependency>

    dependencies>

    ----------------------------------导入插件----------------------------------
    <build>
        <plugins>
            
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-war-pluginartifactId>
                <version>2.2version>
            plugin>
        plugins>
    build>

project>

你可能感兴趣的:(java,maven)