Bootstrap

Maven高级——详解

目录

一、分模块设计

二、分模块设计小实践     

三、Maven继承

1.继承关系实现

​编辑

2.版本锁定

dependencyManagement

自定义属性/引用属性         

四、Maven聚合

五、Maven私服


一、分模块设计

        为什么要分模块设计,将项目按照功能拆分分成若干个子模块,方便项目的管理、扩展、也方便模块间相互调用,资源共享。

二、分模块设计小实践     

        创建一个maven模块tlias-pojo,存放实体类

模块创建成功

把tlias-web-management中pojo包复制过去(包的结构要与原来的一致),原来就可以删除了。发现报错了。这是因为我们没有导入对应的依赖。

现在我们去导入依赖

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
</dependency>
 <dependency>
            <groupId>org.example</groupId>
            <artifactId>tlias-pojo</artifactId>
            <version>1.0-SNAPSHOT</version>
</dependency>

创建一个maven模块tlias-utils,存放工具类 ,我就不过多讲解了,自己动手试试。

 注意事项:分模块开发需要先针对模块功能进行设计,在进行编码,不会先将工程开发完毕,然后再进行拆分。 

三、Maven继承

        继承描述的是两个工程间的关系,与java中继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。它简化了依赖配置、统一管理依赖,通过<parent></parent>实现。只能单继承,多重继承。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/> <!-- lookup parent from repository -->
</parent>

1.继承关系实现

1.创建maven模块tlias-parent,该工程为父工程,设置打包方式为pom(默认jar)

        打包方式:

  • jar:普通模块打包,springboot项目基本都是jar包(内嵌tomcat运行)
  • war:普通web程序打包,需要部署在外部的tomcat服务器中运行
  • pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理

2.在子工程的pom.xml文件中,配置继承关系

<parent>
    <groupId>org.example</groupId>
    <artifactId>tlias-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../tlias-parent/pom.xml</relativePath>
</parent>

        ../表示上一级目录 ,relativePath指定父工程的pom文件的相对位置(如果不指定,将从本地仓库/远程仓库查找该工程).

        Definition of groupld is redundant, because it's inherited from the parent,表示groupld的定义是冗余的,因为它是从父类继承而来的,可删除。

3.在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)

2.版本锁定

dependencyManagement

        在maven中,可以在父工程的pom文件中通过<dependencyManagement>来实现统一管理依赖版本。

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt</artifactId>
                <version>0.9.1</version>
            </dependency>            
        </dependencies>
</dependencyManagement>

       在父工程中<dependency>是直接依赖,子工程会直接加入依赖 。而<dependencyManagement>仅仅管理依赖的版本,子工程需自己导入依赖。子工程映入依赖时,无需指定<version>版本号,由父工程统一管理。变更依赖版本,只需要在父工程中统一变更。

自定义属性/引用属性         

<properties>
<!--        指定JDK的版本-->
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>

        <lombok.version>1.18.24</lombok.version>
</properties>

四、Maven聚合

       聚合: 将多个模块组织成一个整体,同时进行项目的构建。

        聚合工程(父工程):一个不具有业务功能的“空”工程(有且仅有一个pom文件)

        maven中可以通过<modules>设置当前聚合工程所包含的子模块名称

<modules>
        <module>../tlias-pojo</module>
        <module>../tlias-utils</module>
        <module>../tlias-web-management</module>
</modules>

        聚合工程中所包含的模块,在构建时,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中的模块的配置书写位置无关。

        现在可以直接package。

五、Maven私服

        私服是一种特殊的远程仓库,他是架设在局域网的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。

        依赖查找的顺序:本地仓库->私服->中央仓库

        私服在企业开发项目中,一个项目/公司,只需要一台即可(无需我们自己搭建,会使用即可)。

;