博客
关于我
Maven高级 聚合与继承 版本管理 资源管理 多环节开发配置 跳过测试 私服
阅读量:94 次
发布时间:2019-02-26

本文共 4002 字,大约阅读时间需要 13 分钟。

Maven高级实践指南

1. 分模块开发与设计

1.0 为什么进行分模块开发

分模块开发是Maven项目管理中核心的实践方式。通过将项目划分为多个模块,不仅可以提高开发效率,还能实现各个模块的独立维护和快速迭代。这种方式尤其适合复杂的项目结构,能够清晰地划分功能边界。

1.1 工程模块与模块划分

在Maven项目中,模块划分是按照业务功能来进行的。通常包括以下几个核心模块:

  • pojo(POJO):负责持久化层(Entity类)及基本数据处理。
  • dao(Data Access Object):负责数据库操作及数据层逻辑。
  • service(Service Layer):负责业务逻辑处理及服务层接口。
  • controller(Controller Layer):负责前端请求处理及接口暴露。

1.2 SSM_POJO拆分

  • 新建模块:创建一个新的Maven项目模块,命名为ssm_pojo
  • 拷贝相关内容:将原始项目中对应的实体类(User)和配置文件(如hibernate.cfg)拷贝到新模块中。
  • 注意事项:
    • 实体类(User)需保留。
    • 配置文件无需保留,通过依赖管理实现。
  • 1.3 SSM_DAO拆分

  • 新建模块:创建一个新的Maven项目模块,命名为ssm_dao
  • 拷贝相关内容:将原始项目中对应的Dao接口和实现类拷贝到新模块中。
  • 配置文件管理:保留与数据层相关的配置文件(如jdbc.properties),并确保与SqlSessionFactoryBean绑定。
  • pom.xml管理:引入相关坐标(如spring、mybatis、druid等),并删除不必要的依赖。
  • 1.4 SSM_Service拆分

  • 新建模块:创建一个新的Maven项目模块,命名为ssm_service
  • 拷贝相关内容:将原始项目中对应的Service接口和实现类拷贝到新模块中。
  • 配置文件管理:保留与业务层相关的配置文件(如jdbc.properties)。
  • pom.xml管理:引入相关坐标(如spring、junit等),并删除不必要的依赖。
  • 1.5 SSM_Control拆分

  • 新建模块:创建一个新的Maven项目模块,命名为ssm_controller
  • 拷贝相关内容:将原始项目中对应的Controller类和相关配置文件拷贝到新模块中。
  • 配置文件管理:保留与表现层相关的配置文件(如application.properties)。
  • pom.xml管理:引入相关坐标(如springmvc、tomcat等),并删除不必要的依赖。
  • 1.6 分模块总结

    • 依赖管理:模块间通过pom.xml引入依赖,确保依赖版本统一。
    • 资源管理:每个模块只包含自身功能相关的资源文件。
    • 配置管理:每个模块独立管理自身的配置文件。

    2. 聚合与多模块构建

    2.1 多模块构建维护

    多模块构建是Maven聚合的核心应用场景,适用于需要多个模块协同工作的项目。

    2.2 聚合操作

  • 创建聚合项目:创建一个空模块,打包类型为pom
  • 定义关联模块:
    ../ssm_controller
    ../ssm_service
    ../ssm_dao
    ../ssm_pojo
  • 依赖管理:在聚合项目的pom.xml中定义各模块的依赖关系。
  • 3. 继承与模块依赖

    3.1 模块依赖关系维护

    通过Maven的继承关系实现模块间的依赖管理。父模块定义依赖,子模块继承父模块的配置。

    3.2 继承操作

  • 在子模块的pom.xml中定义父模块坐标:
    com.itheima
    ssm
    1.0-SNAPSHOT
    ../ssm/pom.xml
  • 父模块定义依赖管理:
    org.springframework
    spring-context
    5.1.9.RELEASE
  • 3.3 继承依赖使用

    在子模块中定义自己的依赖,无需重复定义版本,版本继承自父模块。

    4. 属性管理

    4.1 版本统一的重要性

    版本统一是Maven项目管理的核心原则,确保所有模块使用相同的依赖版本。

    4.2 属性类别

    • 自定义属性:用于定义项目自定义的属性值。
    • 内置属性:使用Maven内置属性进行快速配置。
    • Setting属性:通过setting.xml文件进行动态配置。
    • Java系统属性:通过系统环境变量获取配置。
    • 环境变量属性:通过Maven setting.xml文件获取配置。

    4.3 自定义属性示例

    5.1.9.RELEASE
    4.12

    5. 版本管理

    5.1 工程版本区分

    • SNAPSHOT:用于项目开发阶段,每次构建生成新的版本。
    • RELEASE:用于项目发布阶段,表示项目完成了一个稳定版本。

    5.2 工程版本号约定

    • 主版本:表示项目架构变更(如从Spring 4到Spring 5)。
    • 次版本:表示重大功能增加或系统性漏洞修复。
    • 增量版本:表示重大漏洞修复。
    • 里程碑版本:表示项目达到一个里程碑阶段。

    6. 资源配置

    6.1 资源配置多文件维护

    通过Maven的资源加载机制,支持多个配置文件的加载和引用。

    6.2 配置文件引用pom属性

    在配置文件中使用pom属性进行动态配置:

    ${jdbc.url}

    7. 多环境开发

    7.1 多环境兼容

    通过Maven多环境配置,支持开发、测试、生产等多种环境的切换。

    7.2 多环境配置示例

    pro_env
    jdbc:mysql://127.1.1.1:3306/ssm_db
    true

    8. 跳过测试

    8.1 应用场景

    • 项目功能尚未开发。
    • 单个功能未完成。
    • 快速打包。

    8.2 使用命令跳过测试

    mvn install -DskipTests

    8.3 使用界面操作跳过测试

    通过IDE界面选择“跳过测试”进行快速构建。

    8.4 使用配置跳过测试

    在pom.xml中配置:

    maven-surefire-plugin
    2.22.1
    true
    **/User*Test.java
    **/User*TestCase.java

    9. 私服部署

    9.1 私服安装

    • 下载Nexus:Sonatype Nexus官网
    • 启动Nexus:nexus.exe /run nexus
    • 访问Nexus:http://localhost:8081

    9.2 私服资源管理

    • 宿主仓库:用于存储无法从中央仓库获取的资源。
    • 代理仓库:代理中央仓库,实现对外部仓库的访问。
    • 仓库组:将多个仓库组合为一个群组,方便配置管理。

    9.3 资源上传

    • 打包好资源文件。
    • 在pom.xml中定义仓库:
      heima-release
      http://localhost:8081/repository/heima-release/
      heima-snapshots
      http://localhost:8081/repository/heima-snapshots/

    9.4 项目访问私服

    在项目的pom.xml中添加私服仓库:

    heima-release
    http://localhost:8081/repository/heima-release/
    heima-snapshots
    http://localhost:8081/repository/heima-snapshots/

    9.5 发布到私服

    mvn deploy

    转载地址:http://dutz.baihongyu.com/

    你可能感兴趣的文章
    Numpy:按多个条件过滤行?
    查看>>
    Numpy:条件总和
    查看>>
    numpy、cv2等操作图片基本操作
    查看>>
    numpy中的argsort的用法
    查看>>
    NumPy中的精度:比较数字时的问题
    查看>>
    numpy判断对应位置是否相等,all、any的使用
    查看>>
    Numpy多项式.Polynomial.fit()给出的系数与多项式.Polyfit()不同
    查看>>
    Numpy如何使用np.umprod重写range函数中i的python
    查看>>
    numpy学习笔记3-array切片
    查看>>
    numpy数组替换其中的值(如1替换为255)
    查看>>
    numpy数组索引-ChatGPT4o作答
    查看>>
    numpy最大值和最大值索引
    查看>>
    NUMPY矢量化np.prod不能构造具有超过32个操作数的ufunc
    查看>>
    Numpy矩阵与通用函数
    查看>>
    numpy绘制热力图
    查看>>
    numpy转PIL 报错TypeError: Cannot handle this data type
    查看>>
    Numpy闯关100题,我闯了95关,你呢?
    查看>>
    nump模块
    查看>>
    Nutch + solr 这个配合不错哦
    查看>>
    NuttX 构建系统
    查看>>