Maven高级

  • Maven:是一款构建和管理java项目的工具

分模块设计与开发

分模块开发是指将整个项目划分为若干模块,每个模块负责不同的功能且相互独立。其意义体现在以下几个方面:

  1. 提高代码可维护性
    当一个项目变得越来越复杂时,将所有的代码集中在一起很容易导致代码重复、关注点分散、可维护性差等问题。分模块开发使得不同模块之间高度聚合,低耦合,每个模块聚焦于一个独立的业务,从而提高了代码的可维护性。
  2. 方便开发和测试
    分模块开发使得不同模块之间解耦,开发人员可以更方便的专注于单个模块的开发、测试和部署,可以快速定位所需的修改点和派生影响。这对团队协作、小步快跑的开发方式、快速响应客户需求都有很大的好处。
  3. 代码复用
    将通用的代码抽象成一个或多个独立的模块,可以使这些通用的代码可以在不同的项目中得到复用,提高了代码的灵活性和复用性,也可以减少代码的重复开发。
  4. 提高项目可扩展性
    基于模块的方式组织代码,可以有效保护代码的各个模块之间的关系独立性,降低了后期的扩展难度。如果你未来的项目变得越来越复杂,只需增加新的模块即可,而不需要对原有模块进行大量修改。
    因此,分模块开发可以提高代码的可维护性、复用性、可扩展性,也可以方便开发、测试和团队协作,是现代项目开发中非常重要的一种开发方式。

介绍:

所谓分模块设计,顾名思义指得就是我们在设计一个java项目的时候,将一个java项目拆分成多个模块进行开发

为什么?

  1. 不方便维护
  2. 难以复用
  • 将项目按照功能拆分策划稿若干个子模块,方便项目管理维护、扩展,也方便模块间的相互调用,资源共享
  1. 注意事项:
    • 分模块设计需要先针对对模块功能进行设计,在进行编码,不会先将工程开发完毕,然后进行拆分

继承与聚合

继承和聚合都是面向对象编程中的重要概念,有着不同的意义和应用场景。

  1. 继承
    继承是一种代码重用的方式,它通过让一个类继承另一个类的属性和方法,达到重用代码的目的。子类可以通过继承父类的属性和方法,来实现自己需要的行为,从而减少代码的重复编写。
    继承还有助于提高代码的可维护性,因为可以将公共的行为和特性放在父类中,在子类中只需要专注于实现自己需要的特定行为,可以减少代码的冗余和错误。
  2. 聚合
    聚合是一种将不同的类组合在一起的方式,形成一个新的类别或对象。聚合是一种“有一个”(has-a)的关系,其中包含的对象可以在任何时候独立存在,而不必依赖于其容器。
    聚合提供了一种灵活的方式来设计类和对象之间的关系。它可以将多个对象组合成更高层次的对象,从而加强代码的模块化,并提高了代码的可重用性。
    例如,一个订单类中可能包含订单项列表,在这个场景中,订单项作为订单类的一部分使用,而在其他场景中,订单项可能会作为独立的对象使用,聚合可以很好地满足这种需求。
    继承和聚合都是面向对象编程中的重要概念,适当地使用它们可以提高代码的可维护性、可复用性、可扩展性等方面的质量,对于开发高质量的软件应用具有重要的意义。

继承

  1. 概念:继承描述的是连个工程间的关系,与java中的继承相似,子工程可以继承父工程中的而配置信息,常见于依赖关系的继承
  2. 作用:简化依赖配置、统一管理依赖
  3. 实现:...
    image

继承关系实现

  1. 创建maven模块,该工程为父工程,设置打包方式pom(默认)
    • jar:普通模块打包,springboot项目基本都是jar包,(内嵌Tomcat运行)
    • war:普通web工程打包,需要部署在外部的Tomcat服务器总运行
    • pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理
  2. 在子工程的pom.xml文件中,配置继承关系
  3. 在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)
  4. 注意事项:
    • 在子工程中,配置了继承关系之后,坐标中的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>

  1. <dependencyManagement><dependencies>的区别是什么?
    • dependencies是直接依赖,在父工程配置了依赖,子工程会直接继承下来。
    • dependencyManagement是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)

聚合

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

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

作用:快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)

  • Maven中可以通过<modules>设置当前工程所包含的子模块名称
  • 注意事项:
    • 聚合工程中所包含的模块,在构建时,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写无关

继承与聚合

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

私服

Maven私服

公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器及是公司内部的Maven远程仓库,每个员工的电脑上安装maven软件并且连接私服服务器,员工将自己开发的项目大成jar并发布到私服服务器,其他项目组从私服服务器下载所依赖的构建(jar)。私服还可以充当一个代理服务器,当私服上没有jar包从互联网中央仓库自动下载
image

下载:

**Nexus是Maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus胎体供强大的仓库管理功能。构建搜索功能等。下载地址:http://www.sonatype.org/nexus/archived/ **

安装:

  1. 以管理员身份运行cmd,进入nexus目录后执行命令安装

    • 安装:nexus.bat install
    • 卸载:nexus.bat uninstall
    • 启动:
      • 方式一:进入bin目录后,执行nexus.bat start
      • 方式二:在服务列表中,双击启动服务
    • 访问:打开 http://localhost:8081/nexus/ , 以:admin admin123 登录 即可查看仓库情况
  2. 仓库类型

    • hosted:宿主仓库,部署自己的jar到这个类型的仓库,包括releases和snapshot两部分,Releases公司内部发布版本仓库、Snapshots公司内部测试版本仓库
    • proxy:代理仓库,用于代理远程公共仓库,入maven中央仓库,用于连接私服,私服自动去中央仓库下载jar包或者插件
    • group:仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组
    • virtual(虚拟):姜蓉Maven1版本的jar或插件
  3. 部署项目到私服
    在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包

  1. 在maven的settings.xml 中配置
  2. 并且不忘记了在后面要激活这项配置
  3. 把本地仓库的jar包先删除掉
  4. 在项目里面添加依赖,然后点击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包到私服

  1. 在maven的settings.xml中设置
<server>
    <id>thirdparty</id>
    <username>admin</username>
    <password>admin123</password>
</server>
  1. 执行命令
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
posted @ 2023-05-25 20:07  独徘徊  阅读(26)  评论(0)    收藏  举报