maven高级(day15)

打印 上一主题 下一主题

主题 1115|帖子 1115|积分 3345

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Maven 是一款构建和管理 Java 项目的工具
  分模块计划与开发

所谓分模块计划,顾名思义指的就是我们在计划一个 Java 项目的时间,将一个 Java 项目拆分成多 个模块进行开发。
   分模块计划我们在进行项目计划阶段,就可以将一个大的项目拆分成多少个模块,每一个模块都是独立的

  分模块计划就是将项目按照功能/结构拆分成多少个子模块,方便项目的管理维护、拓展,也方便模块 键的相互调用、资源共享。
  分析




  • 将pojo包下的实体类,抽取到一个maven模块中 tlias-pojo
  • 将utils包下的工具类,抽取到一个maven模块中 tlias-utils
  • 其他的业务代码,放在tlias-web-management这个模块中,在该模块中必要用到实体类 pojo、工具类utils,直接引入对应的依靠即可。
留意:分模块开发必要先针对模块功能进行计划,再进行编码。不会先将工程开发完毕,然后进行拆分。
实现

1. 创建maven模块 tlias-pojo,存放实体类

A. 创建一个正常的Maven模块,模块名tlias-pojo


B. 然后在tlias-pojo中创建一个包 com.itheima.pojo (和原来案例项目中的pojo包名同等)

C. 将原来案例项目 tlias-web-management 中的pojo包下的实体类,复制到tlias-pojo模块中

D. 在 tlias-pojo 模块的pom.xml文件中引入依靠
  1. <dependencies>
  2.     <dependency>
  3.         <groupId>org.projectlombok</groupId>
  4.         <artifactId>lombok</artifactId>
  5.         <version>1.18.24</version>
  6.     </dependency>
  7. </dependencies>
复制代码
E. 删除原有案例项目tlias-web-management的pojo包【直接删除不要犹豫,我们已经将该模块拆 分出去了】,然后在pom.xml中引入 tlias-pojo的依靠
  1. <dependency>
  2.     <groupId>com.itheima</groupId>
  3.     <artifactId>tlias-pojo</artifactId>
  4.     <version>1.0-SNAPSHOT</version>
  5. </dependency>
复制代码
2. 创建Maven模块 tlias-utils,存放相关工具类

A. 创建一个正常的Maven模块,模块名tlias-utils


B. 然后在 tlias-utils 中创建一个包 com.itheima.utils (和原来案例项目中的utils包名 同等)

C. 将原来案例项目 tlias-web-management 中的utils包下的实体类,复制到tlias-utils模块中

D. 在 tlias-utils 模块的pom.xml文件中引入依靠
  1. <dependencies>
  2.     <!--JWT令牌-->
  3.     <dependency>
  4.         <groupId>io.jsonwebtoken</groupId>
  5.         <artifactId>jjwt</artifactId>
  6.         <version>0.9.1</version>
  7.     </dependency>
  8.     <!--阿里云OSS-->
  9.     <dependency>
  10.         <groupId>com.aliyun.oss</groupId>
  11.         <artifactId>aliyun-sdk-oss</artifactId>
  12.         <version>3.15.1</version>
  13.     </dependency>
  14.     <dependency>
  15.         <groupId>javax.xml.bind</groupId>
  16.         <artifactId>jaxb-api</artifactId>
  17.         <version>2.3.1</version>
  18.     </dependency>
  19.     <dependency>
  20.         <groupId>javax.activation</groupId>
  21.         <artifactId>activation</artifactId>
  22.         <version>1.1.1</version>
  23.     </dependency>
  24.     <!-- no more than 2.3.3-->
  25.     <dependency>
  26.         <groupId>org.glassfish.jaxb</groupId>
  27.         <artifactId>jaxb-runtime</artifactId>
  28.         <version>2.3.3</version>
  29.     </dependency>
  30.     <!--WEB开发-->
  31.     <dependency>
  32.         <groupId>org.springframework.boot</groupId>
  33.         <artifactId>spring-boot-starter-web</artifactId>
  34.         <version>2.7.5</version>
  35.     </dependency>
  36.     <dependency>
  37.         <groupId>org.projectlombok</groupId>
  38.         <artifactId>lombok</artifactId>
  39.         <version>1.18.24</version>
  40.     </dependency>
  41. </dependencies>
复制代码
E. 删除原有案例项目tlias-web-management的utils包【直接删除不要犹豫,我们已经将该模块 拆分出去了】,然后在pom.xml中引入 tlias-utils的依靠
  1. <dependency>
  2.     <groupId>com.itheima</groupId>
  3.     <artifactId>tlias-utils</artifactId>
  4.     <version>1.0-SNAPSHOT</version>
  5. </dependency>
复制代码
到此呢,就已经完成了模块的拆分,拆分出了 tlias-pojo、tlias-utils、tlias-web management ,如果其他项目中必要用到 pojo,大概 utils工具类,就可以直接引入依靠。
   总结

  1). 什么是分模块计划:将项目按照功能拆分成多少个子模块
  2). 为什么要分模块计划:方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享
  3). 留意事项:分模块计划必要先针对模块功能进行计划,再进行编码。不会先将工程开发完毕,然后进行拆分
  继承与聚合

在案例项目分模块开发之后啊,我们会看到tlias-pojo、tlias-utils、tlias-web-management 中都引入了一个依靠 lombok 的依靠。我们在三个模块中分别设置了一次。

如果是做一个大型的项目,这三个模块当中重复的依靠大概会很多很多。如果每一个 Maven 模块里 面,我们都来单独的设置一次,功能虽然能实现,但是设置是比力繁琐的。
继承

我们可以再创建一个父工程 tlias-parent ,然后让上述的三个模块 tlias-pojo、tlias utils、tlias-web-management 都来继承这个父工程 。 然后再将各个模块中都共有的依靠,都 提取到父工程 tlias-parent中进行设置,只要子工程继承了父工程,依靠它也会继承下来,这样就 无需在各个子工程中进行设置了。

   

  • 概念:继承 形貌的是两个工程间的关系,与 java 中的继承相似,子工程可以继承父工程中的设置信息,常见于依靠关系的继承。
  • 作用:简化依靠设置、同一管理依靠
  • 实现:<parent> … </parent>
  继承关系

   Maven 打包方式
  

  • jar:平常模块打包,springboot 项目根本都是 jar 包(内嵌 tomcat 运行)
  • war:平常 web 程序打包,必要摆设在外部的 tomcat 服务器中运行
  • pom:父工程或聚合工程,该模块不写代码,仅进行依靠管理
  

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

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

3). 在 父工程 中设置各个工程共有的依靠(子工程会主动继承父工程的依靠)。

   留意事项
  

  • 在子工程中,设置了继承关系之后,坐标中的 groupId 是可以省略的,因为会主动继承父工程的 。
  • relativePath 指定父工程的 pom 文件的相对位置(如果不指定,将从当地仓库/远程仓库查找该工程)。
  • ../ 代表的上一级目录
  

  • 若父子工程都设置了同一个依靠的不同版本,以子工程的为准。
  版本锁定

场景

如果项目中各个模块中都公共的这部分依靠,我们可以直接界说在父工程中,从而简化子工程的设置。 然而在项目开发中,另有一部分依靠,并不是各个模块都共有的,大概只是其中的一小部分模块中使用 到了这个依靠。
好比:在tlias-web-management、tlias-web-system、tlias-web-report这三个子工程中, 都使用到了jwt的依靠。 但是 tlias-pojo、tlias-utils中并不必要这个依靠,那此时,这个依靠,我们不会直接设置在父工程 tlias-parent中,而是哪个模块必要,就在哪个模块中设置。
而由于是一个项目中的多个模块,那多个模块中,我们要使用的同一个依靠的版本要同等,这样便于项 目依靠的同一管理。好比:这个jwt依靠,我们都使用的是 0.9.1 这个版本。

那假如说,我们项目要升级,要使用到jwt最新版本 0.9.2 中的一个新功能,那此时必要将依靠的版 本升级到0.9.2,那此时该怎么做呢 ?
那我们又该如何来解决这个问题,如何来同一管理各个依靠的版本呢?
答案:Maven的版本锁定功能
先容

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

   留意事项
  

  • 在父工程中所设置的​  <dependencyManagement> ​ 只能同一管理依靠版本,并不会将这个 依靠直接引入进来。 这点和 <dependencies> 是不同的。
  • 子工程要使用这个依靠,照旧必要引入的,只是此时就无需指定 <version> 版本号了, 父工程同一管理。变更依靠版本,只需在父工程中同一变更。
  属性设置

我们也可以通过自界说属性及属性引用的情势,在父工程中将依靠的版本号进行会集管理维护。

1). 自界说属性
  1. <properties>
  2.     <lombok.version>1.18.24</lombok.version>
  3. </properties>
复制代码
2). 引用属性
  1. <dependency>
  2.     <groupId>org.projectlombok</groupId>
  3.     <artifactId>lombok</artifactId>
  4.     <version>${lombok.version}</version>
  5. </dependency>
复制代码
接下来,我们就可以在父工程中,将所有的版本号,都会集管理维护起来。
  1. <properties>    <maven.compiler.source>11</maven.compiler.source>    <maven.compiler.target>11</maven.compiler.target>    <lombok.version>1.18.24</lombok.version>    <jjwt.version>0.9.1</jjwt.version>    <aliyun.oss.version>3.15.1</aliyun.oss.version>    <jaxb.version>2.3.1</jaxb.version>    <activation.version>1.1.1</activation.version>    <jaxb.runtime.version>2.3.3</jaxb.runtime.version></properties><dependencies><dependency>
  2.     <groupId>org.projectlombok</groupId>
  3.     <artifactId>lombok</artifactId>
  4.     <version>${lombok.version}</version>
  5. </dependency></dependencies>        <!--同一管理依靠版本--><dependencyManagement><dependencies>    <!--JWT令牌-->    <dependency>        <groupId>io.jsonwebtoken</groupId>        <artifactId>jjwt</artifactId>        <version>${jjwt.version}</version>    </dependency>    <!--阿里云OSS-->    <dependency>        <groupId>com.aliyun.oss</groupId>        <artifactId>aliyun-sdk-oss</artifactId>        <version>${aliyun.oss.version}</version>    </dependency>    <dependency>        <groupId>javax.xml.bind</groupId>        <artifactId>jaxb-api</artifactId>        <version>${jaxb.version}</version>    </dependency>    <dependency>        <groupId>javax.activation</groupId>        <artifactId>activation</artifactId>        <version>${activation.version}</version>    </dependency>    <!-- no more than 2.3.3-->    <dependency>        <groupId>org.glassfish.jaxb</groupId>        <artifactId>jaxb-runtime</artifactId>        <version>${jaxb.runtime.version}</version>    </dependency></dependencies></dependencyManagement>
复制代码
版本会集管理之后,我们要想修改依靠的版本,就只必要在父工程中自界说属性的位置,修改对应的属 性值即可。
   面试题:<dependencyManagement><dependencies>的区别是什么?
  

  • <dependencies>是直接依靠,在父工程设置了依靠,子工程会直接继承下来。
  • <dependencyManagement>是同一管理依靠版本,不会直接依靠,还必要在子工程中引入 所需依靠(无需指定版本)
  聚合


   

  • 聚合:将多个模块组织成一个整体,同时进行项目的构建。
  • 聚合工程:一个不具有业务功能的“空”工程(有且仅有一个pom文件)
  • 作用:快速构建项目(无需根据依靠关系手动构建,直接在聚合工程上构建即可)
  实现

   maven 中可以通过 <modules> 设置当前聚合工程所包罗的子模块名称
  我们可以在 tlias-parent中,添加如下设置,来指定当前聚合工程,必要聚合的模块:

  
  留意事项
  

  • 聚合工程中所包罗的模块,在构建时,会主动根据模块间的依靠关系设置构建顺序,与聚合工程中模块的设置书写位置无关。
  继承与聚合对比

   作用
        1️⃣聚合用于快速构建项目
        2️⃣继承用于简化依靠设置、同一管理依靠
相同点:
        1️⃣聚合与继承的 pom.xml 文件打包方式均为 pom,通常将两种关系制作到同一个         pom 文件中
        2️⃣聚合与继承均属于计划型模块,并无现实的模块内容
不同点:
        1️⃣聚合是在聚合工程中设置关系,聚合可以感知到参与聚合的模块有哪些
        2️⃣继承是在子模块中设置关系,父模块无法感知哪些子模块继承了自己

  私服


先容

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

  • 当地仓库
  • 私服
  • 中心仓库
    留意事项:私服在企业项目开发中,一个项目/公司,只必要一台即可(无需我们自己搭建,会使 用即可)。 
  资源上传与下载

步骤分析


   资源上传与下载,我们必要做三步设置,实行一条指令。
  

  • 第一步设置:在maven的设置文件中设置访问私服的用户名、密码。
  • 第二步设置:在maven的设置文件中设置连接私服的地址(url地址)。
  • 第三步设置:在项目的pom.xml文件中设置上传资源的位置(url地址)。
  设置好了上述三步之后,要上传资源到私服仓库,就实行实行maven生命周期:deploy。
    私服仓库说明:
  

  • RELEASE:存储自己开发的RELEASE发布版本的资源。
  • SNAPSHOT:存储自己开发的SNAPSHOT发布版本的资源。
  • Central:存储的是从中心仓库下载下来的依靠。
    项目版本说明:
  

  • RELEASE(发布版本):功能趋于稳固、当前更新停止,可以用于发行的版本,存储在私服中的RELEASE仓库中。
  • SNAPSHOT(快照版本):功能不稳固、尚处于开发中的版本,即快照版本,存储在私服的 SNAPSHOT仓库中。
  具体操作

1.设置私服的访问用户名/密码(在自己maven安装目录下的conf/settings.xml中的servers中配 置)

2.设置私服依靠下载的仓库组地址(在自己maven安装目录下的conf/settings.xml中的 mirrors、profiles中设置)

3.设置私服依靠下载的 仓库组地址(settings.xml 中的 mirrors、profiles 中设置)
IDEA的maven工程的pom文件中设置上传(发布)地址(直接在tlias-parent中设置发布地址)

设置完成之后,我们就可以在tlias-parent中实行deploy生命周期,将项目发布到私服仓库中。

通过日志,我们可以看到,这几个模块打的jar包确实已经上传到了私服仓库中(由于当前我们的项目 是SNAPSHOT版本,所以jar包是上传到了snapshot仓库中)。
那接下来,我们再来打开私服来看一下:

我们看到,我们项目中的这几个模块,在私服中都有了。 那接下来,当其他项目组的开发职员在项目 中,就可以直接通过依靠的坐标,就可以完成引入对应的依靠,此时当地仓库没有,就会主动从私服仓 库中下载。
上一节:

Web后端开发总结(day14)-CSDN博客

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表