Maven高级-分模块开发与设计

分模块开发与设计

工厂模块与模块划分
一个包拆成一个工程

Maven高级-分模块开发与设计_第1张图片

ssm_pojo拆分
1.新建模块
    在同级目录下建立模块
    new module-->maven -->组名com.itheima
    名称--ssm_pojo-->放置在同级别目录下
2.拷贝原始项目中对应的相关内容(实体类)到ssm_pojo中
    domain包全表拷贝
3.配置文件 不做修改
    # 由于实体类的API全是idea自带,故不去修改配置
4.compile:编译
    测试编译是否通过
  • 添加到本地仓库 的操作install
ssm_dao拆分
1.新建模块
    在同级目录下建立模块
    new module-->maven -->组名com.itheima
    名称--ssm_dao-->放置在同级别目录下
2.拷贝原始项目中对应的相关内容到ssm_dao中
   * 数据层接口
   * 配置文件:保留与数据层相关配置文件3* 注意:分页插件在配置中与SqlSessionFactoryBear绑定,需要保留   
3.配置文件pom.xml 引入数据层相关坐标即可,删除springmvc相关坐标
       *spring
       *mybatis
       *spring整合mybatis
       *mysql
       *druid
       *pagehelper
       *导入资源文件=>直接依赖ssm_pojo,需要对ssm_pojo模块执行install指令,将其安装到本地仓库
4.compile:编译
       (编译要保证仓库有对应的资源)
    测试编译是否通过(需要先对ssm_pojo模块执行install指令),否则仓库里找不到
  • 当我们编译模块时,必须保证仓库有对应的资源
ssm_service拆分
1.新建模块
    在同级目录下建立模块
    new module-->maven -->组名com.itheima
    名称--ssm_service-->放置在同级别目录下
2.拷贝原始项目中对应的相关内容到ssm_service中
   业务层接口与实现类(xxxService和xxxServiceImpl)
    保留与数据层相关配置
3.配置文件 pom.xml  引入数据层相关坐标即可,删除springmvc相关坐标
    *spring
    *junit
    *spring整合junit
    *直接依赖ssm_dao(对ssm_dao模块执行install指令,将其安装到本地仓库,在导入依赖)
    *间接依赖ssm_pojo(由ssm_dao模块负责依赖关系建立)
   
4.compile:编译
    测试编译是否通过
    
 5.其他
    1.修改service模块的spring核心配置文件名,添加模块名称,格式:applicationContext-service.xml
    2.修改dao模块的spring核心配置文件名,添加模块名称,格式:applicationContext-dao.xml
    3.修改单元测试引入的配置文件名,由单个文件修改为多个文件
ssm_control拆分
1.新建模块
    在同级目录下建立模块
    new module-->maven  (由于是表现层需要选择模板webapp) -->组名com.itheima
    名称--ssm_control-->放置在同级别目录下
2.拷贝原始项目中对应的相关内容到ssm_control中
   表现层控制器类与相关设置类(controller和异常相关)
   配置文件:保留与表现层相关的配置文件,服务器相关配置文件
3.配置文件 pom.xml  引入数据层相关坐标即可,删除springmvc相关坐标
    *spring
    *springmvc
    *jackson
    *servlet
    *tomcat服务器插件   
    *直接依赖ssm_service(对ssm_service模块执行install指令,将其安装到本地仓库,在导入依赖)
    *间接依赖ssm_pojo和ssm_pojo
   
4.compile:编译
    测试编译是否通过
修改web.xml配置文件中加载spring环境的配置文件名称.使用*通配,加载所有的applicationContext-开始的配置文件    
小结
1.模块中仅包含当前模块对应的功能类与配置
2.spring核心配置根据模块功能不同进行独立制作
3.当前模块所依赖的模块通过导入坐标的形式加入当前模块后才可以使用
4.web.xml需加载所有的spring核心配置文件    

聚合

聚合

多模块构建维护

Maven高级-分模块开发与设计_第2张图片

多模块构建维护
    多个模块全部 install到了本地仓库
    其中一个更新或损坏,会导致其他与他依赖的功能无法运行
    
    解决方法:
定义一个工程进行统一维护管理,
功能:对管理范围内的模块,进行统一操作
    
    执行顺序
    
    
    <packaging>war</packaging>
    默认打包为jar文件,声明为war,则打包为war文件

聚合

作用:聚合用于快速构建内maven工程,一次性构建多个项目/模块

实现



<packaging>pompackaging>




<modules>
    
    <module>../ssm_controllermodule>
    <module>../ssm_servicemodule>
    <module>../ssm_daomodule>
    <module>../ssm_pojomodule>
modules>
注意事项:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关
  
小结
作用:方便进行批量的项目打包等操作
    
注意事项:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关
    (线性依赖)
    同级别的则与配置顺序有关(即非线性依赖)
packaging 默认是jar形式(所有的资源文件都是以jar包形式呈现的)
    pom是专门做聚合工程的
    war是web工程
  

继承

继承

Maven高级-分模块开发与设计_第3张图片

起因:各个模块所依赖的配置文件未必同步与兼容
模块依赖关系维护
    统一管理子项目的资源
    
    继承
    作用:通过继承可以实现在子过程中沿用父类中的配置
        * maven中的继承与java中的继承相似,在子过程中配置继承关系        
实现
  • 在每一个子工程中声明其父工程坐标与对应的位置

<parent>
    <groupId>com.itheimagroupId>
    <artifactId>ssmartifactId>
    <version>1.0-SNAPSHOTversion>
    
    <relativePath>../ssm/pom.xmlrelativePath>
    
    <artifactId>ssm_controlartifactId>
    
    <packaging>warpackaging>
    
    
    
    
parent>
继承依赖定义
  • 在父工程中定义依赖管理

    !-- 声明此处进行依赖管理-->
    <dependencyManagement>
        
        <dependencies>
             
                <dependency>
                    <groupId>com.itheimagroupId>
                    <artifactId>ssm_pojoartifactId>
                    <version>1.0-SNAPSHOTversion>
                dependency>
    
                <dependency>
                    <groupId>com.itheimagroupId>
                  <artifactId>ssm_daoartifactId>
                    <version>1.0-SNAPSHOTversion>
                dependency>
    
                <dependency>
                    <groupId>com.itheimagroupId>
                    <artifactId>ssm_serviceartifactId>
                    <version>1.0-SNAPSHOTversion>
                dependency>
            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-contextartifactId>
                <version>5.1.9.RELEASEversion>
        	dependency>
           
        <dependencies>
    <dependencyManagement>
    
继承依赖使用
  • 在每一个子工程中定义依赖关系,无需声明依赖版本,版本参照父工程中依赖的版本

    <dependencies>
    
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
            
        dependency>
    dependencies>
    
  • 继承的资源

Maven高级-分模块开发与设计_第4张图片

继承与聚合
作用:
   ** 聚合用于快速构建项目
   ** 继承用于快速匹配
       
       
  相同点:
      **聚合和继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一pom文件中
      ** 聚合与继承均属于设计型模块,并无实际内容
          
  不同点:
    ** 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
    ** 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己    


可继承的资源:
  
   子项目必须继承的资源
       dependencies
       plugins
   子项目可选择继承的资源   
      dependencyManagement : 工程中一般用于统一子项目的依赖版本
      pluginManagement    
不可继承的资源
       artifactld
       

属性

版本统一的重要性
场景
1.版本更改 不全面,有遗漏,导致部分版本未能更新
2.版本配置有冲突    
  • 定义每个项目的父工程必须导入一下三个属性

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <maven.compiler.source>1.8maven.compiler.source>
        <maven.compiler.target>1.8maven.compiler.target>
        <属性名称>属性值属性名称>
        
    properties>
    
属性类别
  • 自定义属性
  • 内置属性
  • setting属性
  • java系统属性
  • 环境变量属性
自定义属性
作用:等同于定义变量,方便统一维护
  • 定义格式

    
    <properties>
        <spring.version>5.1.9.RELEASEspring.version>
        <junit.version>4.12junit.version>
    properties>
    
  • 调用格式

    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-contextartifactId>
        <version>${spring.version}version>
    dependency>
    
    
    
                <dependency>
                    <groupId>com.itheimagroupId>
                    <artifactId>ssm_pojoartifactId>
                    <version>${version}version>
                    
                dependency>
    
                <dependency>
                    <groupId>com.itheimagroupId>
                    <artifactId>ssm_daoartifactId>
                    <version>${version}version>
                dependency>
    
                <dependency>
                    <groupId>com.itheimagroupId>
                    <artifactId>ssm_serviceartifactId>
                    <version>${version}version>
                
内置属性
  • 作用:使用maven内置属性,快速配置

  • 调用格式

    ${basedir}
    ${version}
    
setting属性
  • 作用:使用Maven配置文件setting.xml中的标签属性,用于动态配置

  • 调用格式

    ${settings.localRepository}
    
Java系统属性
  • 作用:读取Java系统属性

  • 调用格式

    ${user.home}
    
  • 系统属性查询方式

    mvn help:system
    
环境变量属性
  • 作用:使用Maven配置文件setting.xml中的标签属性,用于动态配置

  • 调用格式

    ${env.JAVA_HOME}
    
  • 环境变量属性查询方式

    mvn help:system
    
小结
属性:简化我们的配置过程
  • 定义**[每个项目的父工程必须导入一下三个属性]**

    <properties>
        编译编码
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        使用JDK1.8版本
        <maven.compiler.source>1.8maven.compiler.source>
        
        <maven.compiler.target>1.8maven.compiler.target>
    properties>
    

版本管理

工程版本
  • SNAPSHOT(快照版本)
    • 项目开发过程中,为方便团队成员合作,解决模块间互相依赖和时时更新的问题
    • 开发者对每个模块进行构建的时候,输出的临时性版本较快照版本(测试阶段版本)
    • 快照版本会随着开发的进展不断更新
  • RELEASE(发布版本)
    • 项目开发进入到阶段里程碑后,向外发布较为稳定的版本,这种版本对应的构建是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本
工程版本号约定

Maven高级-分模块开发与设计_第5张图片

资源配置

资源配置多文件维护
  • 在父工程中配置

    
        
        <properties>
            
            <spring.version>5.1.9.RELEASEspring.version>
    
            
           
            <jdbc.url>jdbc:mysql://192.168.93.139:3306/db777jdbc.rrl>
            ...
        properties>
    
资源的复制resources

pluginManagement>
     
        <resources>
            <resource>
                
                <directory>${project.basedir}/src/mian/resourcesdirectory>
                
                
              
                
                <filtering>truefiltering>
            resource>
        resources>


        <resources>
            <resource>
                
               <directory>${project.basedir}/src/test/resourcesdirectory>
              
                
                <filtering>truefiltering>
            resource>
        resources>

    build>
  • 调用

    jdbc.url=${jdbc.url}
    
  • 测试:

    在install成功后,再去仓库查看配置文件,是否加载成功
    

多环境开发配置

多环境兼容

适应多种环境
  • 定义

      
        <profiles>
            
           <profile>
                
              <id>pro_envid>
               
               <properties>
                   <jdbc.url>jdbc:mysql://192.168.93.139:3306/db777jdbc.url>
               properties>
                
               <activation>
                   <activeByDefault>trueactiveByDefault>
               activation>
           profile>
            
            <profile>
               <id>dep_envid>
                <properties>
                    <jdbc.url>jdbc:mysql://192.168.93.149:3306/db777jdbc.url>
                properties>
    
            profile>
            
    
        profiles>
    
  • 使用

    install 没有指定使用哪一个配置文件 查看仓库的配置文件发现没有加载,还是jdbc.url=${jdbc.url} 没有解析出来
        
        启动install时指定用哪一个
        配置启动的指令:
          installl -P dep_env  //指定开发环境
    检查仓库的配置文件jdbc.url=的值 是否已经改变
              
    
    加载指定环境
    作用:
        加载指定环境配置
     调用格式:
    在idea的窗口输入
            mvn 指令 –P 环境定义id
                如:
    mvn install –P pro_env            
    

跳过测试

使用命令跳过测试

Maven高级-分模块开发与设计_第6张图片

Maven高级-分模块开发与设计_第7张图片

- mvn 指令 -D skipTests  或  -DskipTests=true
    
- 属性跳过  maven.test.skip
- mvn 指令 -Dmaven.test.skip=true    
注意事项:
  执行的指令生命周期必须包含测试环节
使用界面跳过测试
如将test指令禁止
使用配置跳过测试
<plugin>
    <artifactId>maven-surefire-pluginartifactId>
    <version>2.22.1version>
    <configuration>
        <skipTests>trueskipTests>
        <includes> 
        	<include>**/User*Test.javainclude>
        includes>
        <excludes>
        	<exclude>**/User*TestCase.javaexclude>
        excludes>
    configuration>
plugin>
Maven的常用指令
mvn clean -X package    输出完整的错误信息

私服

分模块合作开发
需求:小范围内资源共享
Nexus
Nexus是Sonatype公司的一款maven私服产品
nexus安装,启动与配置
  • 在安装目录下通过命令启动

    nexus /run nexus
    //    或者 nexus.exe /run nexus
        //后缀可以省略
    
  • 访问服务器

    http:localhost:8081
    
  • 修改基础配置信息

    安装路径下bin目录中nexus.vmoptions文件中保存有nexus服务器启动的配置信息,如默认占有的内存空间
        
     安装路径下etc目录中的nexus.properties文件保存有nexus基础配置信息,例如默认访问端口8081   
    
私服资源获取
仓库分类
  • 仓库组group
    • 宿主仓库hosted
      • 保存无法从中央仓库获取的资源
        • 自主研发
        • 第三方非开源项目
    • 代理仓库proxy
      • 代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库
    • 仓库组group
      • 将若干个仓库组成一个群组,简化配置
      • 仓库组不能不能保存资源,属于设计型仓库
资源上传
  • 直接图形化操作上传(第三方资源)

  • 注意事项:创建的仓库是什么类型,一般要声明上传的资源的类型

    如创建的是release类型仓库,则上传的文件选择SNAPSHOT会报错
        如果上传的文件不声明类型,该软件则不会处理
    
idea环境中资源上传和下载

Maven高级-分模块开发与设计_第8张图片

访问私服配置
  • 配置本地仓库访问私服的权限(setting.xml)
<servers>
    <server>
        <id>heima-releaseid>
        <username>adminusername>
        <password>adminpassword>
    server>
    <server>
        <id>heima-snapshotsid>
        <username>adminusername>
        <password>adminpassword>
    server>
servers>
  • 配置本地仓库资源来源(setting.xml)

    <mirrors>
        <mirror>
            <id>nexus-heimaid>
            <mirrorOf>*mirrorOf>
            <url>http://localhost:8081/repository/maven-public/url>
        mirror>
    mirrors>
    
  • 再将对应的maven下的cof文件夹下的setting.xml替换一下,保持一致

  • 配置当前项目访问私服上传资源的保存位置pom.xml

    <distributionManagement>
        <repository>
            <id>heima-releaseid>
            <url>http://localhost:8081/repository/heima-release/url>
        repository>
        <snapshotRepository>
            <id>heima-snapshotsid>
            <url>http://localhost:8081/repository/heima-snapshots/url>
        snapshotRepository>
    distributionManagement>	
    

ame>admin
admin




- 配置本地仓库资源来源(setting.xml)

```xml

    
        nexus-heima
        *
        http://localhost:8081/repository/maven-public/
    

  • 再将对应的maven下的cof文件夹下的setting.xml替换一下,保持一致

  • 配置当前项目访问私服上传资源的保存位置pom.xml

    <distributionManagement>
        <repository>
            <id>heima-releaseid>
            <url>http://localhost:8081/repository/heima-release/url>
        repository>
        <snapshotRepository>
            <id>heima-snapshotsid>
            <url>http://localhost:8081/repository/heima-snapshots/url>
        snapshotRepository>
    distributionManagement>	
    

你可能感兴趣的:(Maven高级-分模块开发与设计)