Maven入门到实用技巧使用

本文介绍了Maven在分模块开发中的应用,包括按功能和模块拆分,以及POM文件中关键标签的解析,如modelVersion、parent、groupId等。同时,讲解了dependencyManagement与plugins的使用和区别,旨在帮助读者掌握Maven项目管理和构建工具的配置。
摘要由CSDN通过智能技术生成

Maven学习

简介:主要用于jar包的构建和管理(其他详细介绍可以参考官网)

一、分模块开发

1.1 按照功能拆分
  • 银行取款:柜台取款、app取款、电脑网银取款,虽然都是取款但是场景不一样;如果三个场景都放在一个项目代码中,当项目运行出错时,三个场景的业务都无法办理,所以可以进行拆分。

按照某一个功能的不同使用场景进行拆分

1.2 按照模块拆分
  • 如项目中有pojoutilsservicedaocontroller等模块,可以按照这些模块进行拆分。

pojoutilsservicedaocontroller等模块拆分出来,一个模块一个项目,然后把拆分出来的模块进行聚合,这样就可以运行了。

二、POM文件解析

2.1 描述
  • POMproject object model 项目对象模型
  • 个人理解:pom.xml中有很多的配置,通过标签方式,然后赋值在标签中,就好像是一个java对象中有很多属性,如:<modelVersion>4.0.0</modelVersion>理解成pom.setModelVersion("4.0.0"),学习maven就是类似于理解java对象中每个属性的含义
2.2 具体标签
  • modelVersion:声明此POM符合哪个版本的项目描述符;如:<modelVersion>4.0.0</modelVersion>就是符合4.0.0版本的项目描述符

  • parent:如果父项目存在就声明父项目的坐标信息,这样子项目就不需要声明groupIdversion了,因为子项目会继承父项目的groupIdversion

    • groupId:项目开发组或公司的唯一标识
    • artifactId:项目唯一标识
    • version:项目版本号
    • parent使用举例:
        // 无父级
        <groupId>com.ntzhuima.boot</groupId>
        <artifactId>daguo</artifactId>
        <version>2.0.0-jdk8-snapshot</version>
        // 有父级
        <parent>
          <groupId>com.ntzhuima.boot</groupId>
          <artifactId>daguo-framework</artifactId>
          <version>${revision}</version>
        </parent>
        <artifactId>daguo-common</artifactId>
    
  • packaging:打包方式,默认是jar。如:<packaging>jar</packaging>

    • <packaging>pom</packaging><packaging>jar</packaging>的区别
    • 答:作为父级项目,没有代码需要编译或者测试,也没有资源需要处理,是了聚合工程用的,把多个模块聚合在一个模块中使用pom;而jar表示项目将会编译成jar包,作为服务使用
  • name:项目的全称

  • description:项目功能的描述

  • url: 项目主页的URL(代码仓库的地址)

  • inceptionYear:项目开始的年份,4位数字,如2024,此值在生成版权声明以及作为信息时使用

  • organization:这个元素描述了项目所属组织的各种属性。在创建文档时使用这些属性(用于版权声明和链接)

  • licenses/license*:这个元素描述了项目的license,如果项目没有license,也可以不配置

  • developers/developer*:这个元素描述了项目的开发者信息,如果项目没有开发者,也可以不配置

  • contributors/contributor*:这个元素描述了项目的贡献者信息,如果项目没有贡献者,也可以不配置

  • mailingLists/mailingList*:这个元素描述了项目的邮件列表信息,如果项目没有邮件列表,也可以不配置

  • prerequisites:这个元素描述了项目构建和运行所需要的先决条件

  • modules/module*:这个元素描述了项目包含的模块,如果项目没有模块,也可以不配置;通常在父工程中使用,编译父工程时,modules中的子工程也会被编译

    • 使用举例
      <modules>
          <module>daguo-dependencies</module>
          <module>daguo-framework</module>
      </modules>
      
  • properties/key=value*:这个元素描述了Maven构建过程中的常量,在POM其他地方可以直接引用,如${project.version}

    • 使用举例
      <properties>
          <revision>2.0.0</revision>
          <!-- Maven 相关 -->
          <java.version>1.8</java.version>
          <maven.compiler.source>${java.version}</maven.compiler.source>
      </properties>
    
  • dependencyManagement和dependencies/dependency*

在单体项目中,引用项目直接使用dependencies标签就可以了;如果是一个大的项目,包含很多子模块,为了实现版本的统一和管理,通常使用dependencyManagement
dependencies:自动引入声明在dependencies里的所有依赖,并默认被所有的子项目继承。如果项目中不写依赖项,则会从父项目继承(属性全部继承)声明在父项目dependencies里的依赖项
dependencyManagement里只是声明依赖,并没有真正的引入(可以理解为只在父项目,外层来声明项目中要引入哪些jar包),因此子项目需要显示的声明需要的依赖。如果不在子项目中声明依赖,是不会从父项目中继承的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且versionscope都读取;
当子模块dependencies中没有指定版本号时,父模块的dependencyManagement对应的引用模块才会生效,如果子模块dependencies中指定了版本号,则以子模块的为准。

  • buildpluginManagementplugins
    • 举例:
// 父POM
<build>
   <pluginManagement>
       <plugin>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-maven-plugin</artifactId>
           <executions>
               <execution>
                   <id>repackage</id>
                   <goals>
                       <goal>repackage</goal>
                   </goals>
               </execution>
           </executions>
           <configuration>
               <mainClass>${xxxx}</mainClass>
           </configuration>
       </plugin>
   </pluginManagement>
</build>
// 子POM
<build>
   <plugins>
       <plugin>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-maven-plugin</artifactId>
       </plugin>
</build>

build构建项目所需要的信息,pluginmanagement是插件的声明,即使在项目中的 pluginManagement下声明了插件,Maven 会加载该插件pluginManagement 声明可以被继承。pluginManagement 一般是用来在 父POM 中定义,提供给子POM使用,子POM也可以覆盖这个定义,而且你在父POM中定义了版本之后,子模块中直接应用groupIdartifactId,而不用指定版本,对于多个模块来说,可共享父POM 的定义,方便了统一管理;而在父POM中的pluginManagement并不会介入到Maven的生命周期。pluginManagementdependencyManagement一样的性质,只起到声明作用。

  • 其他的标签请参考下文附录的官方文档查阅

附录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值