Maven高级
- Maven:是一款构建和管理java项目的工具
分模块设计与开发
分模块开发是指将整个项目划分为若干模块,每个模块负责不同的功能且相互独立。其意义体现在以下几个方面:
- 提高代码可维护性
当一个项目变得越来越复杂时,将所有的代码集中在一起很容易导致代码重复、关注点分散、可维护性差等问题。分模块开发使得不同模块之间高度聚合,低耦合,每个模块聚焦于一个独立的业务,从而提高了代码的可维护性。 - 方便开发和测试
分模块开发使得不同模块之间解耦,开发人员可以更方便的专注于单个模块的开发、测试和部署,可以快速定位所需的修改点和派生影响。这对团队协作、小步快跑的开发方式、快速响应客户需求都有很大的好处。 - 代码复用
将通用的代码抽象成一个或多个独立的模块,可以使这些通用的代码可以在不同的项目中得到复用,提高了代码的灵活性和复用性,也可以减少代码的重复开发。 - 提高项目可扩展性
基于模块的方式组织代码,可以有效保护代码的各个模块之间的关系独立性,降低了后期的扩展难度。如果你未来的项目变得越来越复杂,只需增加新的模块即可,而不需要对原有模块进行大量修改。
因此,分模块开发可以提高代码的可维护性、复用性、可扩展性,也可以方便开发、测试和团队协作,是现代项目开发中非常重要的一种开发方式。
介绍:
所谓分模块设计,顾名思义指得就是我们在设计一个java项目的时候,将一个java项目拆分成多个模块进行开发
为什么?
- 不方便维护
- 难以复用
- 将项目按照功能拆分策划稿若干个子模块,方便项目管理维护、扩展,也方便模块间的相互调用,资源共享
- 注意事项:
- 分模块设计需要先针对对模块功能进行设计,在进行编码,不会先将工程开发完毕,然后进行拆分
继承与聚合
继承和聚合都是面向对象编程中的重要概念,有着不同的意义和应用场景。
- 继承
继承是一种代码重用的方式,它通过让一个类继承另一个类的属性和方法,达到重用代码的目的。子类可以通过继承父类的属性和方法,来实现自己需要的行为,从而减少代码的重复编写。
继承还有助于提高代码的可维护性,因为可以将公共的行为和特性放在父类中,在子类中只需要专注于实现自己需要的特定行为,可以减少代码的冗余和错误。 - 聚合
聚合是一种将不同的类组合在一起的方式,形成一个新的类别或对象。聚合是一种“有一个”(has-a)的关系,其中包含的对象可以在任何时候独立存在,而不必依赖于其容器。
聚合提供了一种灵活的方式来设计类和对象之间的关系。它可以将多个对象组合成更高层次的对象,从而加强代码的模块化,并提高了代码的可重用性。
例如,一个订单类中可能包含订单项列表,在这个场景中,订单项作为订单类的一部分使用,而在其他场景中,订单项可能会作为独立的对象使用,聚合可以很好地满足这种需求。
继承和聚合都是面向对象编程中的重要概念,适当地使用它们可以提高代码的可维护性、可复用性、可扩展性等方面的质量,对于开发高质量的软件应用具有重要的意义。
继承
- 概念:继承描述的是连个工程间的关系,与java中的继承相似,子工程可以继承父工程中的而配置信息,常见于依赖关系的继承
- 作用:简化依赖配置、统一管理依赖
- 实现:
...
![image]()
继承关系实现
- 创建maven模块,该工程为父工程,设置打包方式pom(默认)
- jar:普通模块打包,springboot项目基本都是jar包,(内嵌Tomcat运行)
- war:普通web工程打包,需要部署在外部的Tomcat服务器总运行
- pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理
- 在子工程的pom.xml文件中,配置继承关系
- 在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)
- 注意事项:
- 在子工程中,配置了继承关系之后,坐标中的groupId是可以省略的,因为会自动继承父工程的
- relativePath指定父工程的pom文件的相对位置(如果不指定,将从本地仓库/远程仓库查找该工程)
继承
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.itheima</groupId>
<artifactId>tlias-web-management</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>8</java.version>
<mybatis.version>2.2.2</mybatis.version>
<pagehelper.version>1.4.2</pagehelper.version>
<aliyun.version>3.15.1</aliyun.version>
<jaxb-api.version>2.3.1</jaxb-api.version>
<activation.version>1.1.1</activation.version>
<jaxb-runtime.version>2.3.3</jaxb-runtime.version>
<fastjson.version>1.2.76</fastjson.version>
<jjwt.version>0.9.1</jjwt.version>
</properties>
<dependencies>
<!--web起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--springboot单元测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--PageHelper分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<!--阿里云OSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb-api.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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<!--JWT令牌-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jjwt.version}</version>
</dependency>
<!--fastJSON-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!--AOP-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
<dependencyManagement>与<dependencies>的区别是什么?- dependencies是直接依赖,在父工程配置了依赖,子工程会直接继承下来。
- dependencyManagement是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)
聚合
聚合:将多个模块组织成一个整体,同时进行项目的构建
聚合工程:一个不具有业务功能的“空”工程(有且仅有一个pom文件)
作用:快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)
- Maven中可以通过
<modules>设置当前工程所包含的子模块名称 - 注意事项:
- 聚合工程中所包含的模块,在构建时,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写无关
继承与聚合
- 作用:
- 聚合而用于快速构建项目
- 继承用于简化依赖配置、统一管理依赖
- 相同点:
- 聚合与继承的pom.xml文件打包方式为pom,可以将两种关系制作到同一个pom文件中
- 聚合与继承均属于设计模块,并无实际的模块内容
- 不同点:
- 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些
- 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
私服
Maven私服
公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器及是公司内部的Maven远程仓库,每个员工的电脑上安装maven软件并且连接私服服务器,员工将自己开发的项目大成jar并发布到私服服务器,其他项目组从私服服务器下载所依赖的构建(jar)。私服还可以充当一个代理服务器,当私服上没有jar包从互联网中央仓库自动下载

下载:
**Nexus是Maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus胎体供强大的仓库管理功能。构建搜索功能等。下载地址:http://www.sonatype.org/nexus/archived/ **
安装:
-
以管理员身份运行cmd,进入nexus目录后执行命令安装
- 安装:nexus.bat install
- 卸载:nexus.bat uninstall
- 启动:
- 方式一:进入bin目录后,执行nexus.bat start
- 方式二:在服务列表中,双击启动服务
- 访问:打开 http://localhost:8081/nexus/ , 以:admin admin123 登录 即可查看仓库情况
-
仓库类型
- hosted:宿主仓库,部署自己的jar到这个类型的仓库,包括releases和snapshot两部分,Releases公司内部发布版本仓库、Snapshots公司内部测试版本仓库
- proxy:代理仓库,用于代理远程公共仓库,入maven中央仓库,用于连接私服,私服自动去中央仓库下载jar包或者插件
- group:仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组
- virtual(虚拟):姜蓉Maven1版本的jar或插件
-
部署项目到私服
在Maven的settings.xml里面的<servers>标签中:
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
在项目的pom.xml中配置
<distributionManagement>
<repository>
<id>releases</id>
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
注意:pom.xml这里<id>和settings.xml配置<id>对应
从私服下载jar包
- 在maven的settings.xml 中配置
- 并且不忘记了在后面要激活这项配置
- 把本地仓库的jar包先删除掉
- 在项目里面添加依赖,然后点击compile
<profile>
<!--profile 的 id-->
<id>dev</id>
<repositories>
<repository>
<!--仓库 id, repositories 可以配置多个仓库,保证 id 不重复-->
<id>nexus</id>
<!--仓库地址,即 nexus 仓库组的地址-->
<url>http://localhost:8081/nexus/content/groups/public/</url>
<!--是否下载 releases 构件-->
<releases>
<enabled>true</enabled>
</releases>
<!--是否下载 snapshots 构件-->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!-- 插件仓库, maven 的运行依赖插件,也需要从私服下载插件 -->
<pluginRepository>
<!-- 插件仓库的 id 不允许重复,如果重复后边配置会覆盖前边 -->
<id>public</id>
<name>Public Repositories</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
导入到jar包到本地仓库
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile=fastjson-1.1.37.jar -Dpackaging=jar
导入jar包到私服
- 在maven的settings.xml中设置
<server>
<id>thirdparty</id>
<username>admin</username>
<password>admin123</password>
</server>
- 执行命令
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty


浙公网安备 33010602011771号