• maven


    目录

    分模块开发

    依赖传递与冲突

    依赖范围

    聚合

    继承 

    属性

    多环境

    跳过测试

    私服

    maven生命周期


    分模块开发

    按照功能将项目进行拆分,每一层都可以单独维护,也可以很方便的被别人使用

            银行项目:银行柜台、取款机、网站、手机app对应不同的场景,因此需要按照功能拆分

    按照模块拆分:

            如电商的项目中,有订单和商品两个模块,订单中需要包含商品的详细信息,所以需要商品的模型类,商品模块也会用到商品的模型类,这个时候如果两个模块中都写模型类,就会出现重复代码,后期的维护成本就比较高。我们就想能不能将它们公共的部分抽取成一个独立的模块,其他模块要想使用可以像添加第三方jar包依赖一样来使用我们自己抽取的模块,这样就解决了代码重复的问题,这种拆分方式就说我们所说的按照模块拆分

    步骤
    (1) 创建 Maven模块:将domain模块单独抽出来建一个项目 maven_03_pojo
    (2) 书写模块代码
    分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。拆 分方式可以按照功能拆也可以按照模块拆。
    (3) 通过 maven 指令安装模块到本地仓库 (install 指令 )
    团队内部开发需要发布模块功能到团队内部可共享的仓库中 ( 私服 )

    (4)修改原项目的pom.xml文件添加domain项目的坐标进行jar包的引入

            
                com.itheima
                maven_03_pojo
                1.0-SNAPSHOT
            
     

    依赖传递与冲突

    依赖指当前项目运行所需的 jar ,一个项目可以设置多个依赖
    依赖传递:A依赖了 B C,B C 有分别依赖了其他 jar 包,所以在 A项目中就可以使用上面所有jar包
    依赖冲突 是指项目依赖的某一个 jar 包,有多个不同的版本,因而造成类包版本冲突
            特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
            路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
            声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
    可选依赖:指对外隐藏当前所依赖的资源 --- 不透明,不让别人用自己所依赖的东西
    com.itheima
    maven_03_pojo
    1.0-SNAPSHOT
    true
    排除依赖:指主动断开依赖的资源,被排除的资源无需指定版本---A 知道有 C的存在,主动将其排除掉( 标签

    依赖范围

    依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其使用范围

    作用范围:

    • 主程序范围内有效(main文件夹范围内)
    • 测试程序范围有效(test文件夹范围内
    • 是否参与打包(package指令范围内)   

    聚合

    背景:当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新, 此时可以使用聚合工程来解决批量模块同步构建的问题

    聚合工程:通常是一个不具有业务功能的""工程(有且仅有一个pom文件),将多个模块组织成一个整体,同时进行项目构建;

    项目打包方式为pom:说明该项目为聚合或继承项目

    com.itheima
    maven_01_parent
    1.0-RELEASE
    pom
             ../maven_02_ssm
             ../maven_03_pojo
             ../maven_04_dao

    继承 

    继承 : 描述的是两个工程间的关系,与 java 中的继承相似,子工程可以继承父工程中的配置信
    息,常见于依赖关系的继承。一般将子项目共同使用的 jar 包都抽取出来,维护在父项目的 pom.xml 中,若有的依赖子项目并不都需要,则放到依赖管理中去
    作用:
            简化配置
            减少版本冲突
             com.itheima
             maven_01_parent
             1.0-RELEASE
            
             ../maven_01_parent/pom.xml
    ...... dependencies >
    1
    2
    3         
    4                 
    5                         junit
    6                         junit
    7                          4.12
    8                          test
    9                 
    10         
    11
    dependencyManagement 标签中 jar 包版本发生变化,所有子项目中有用到该 jar 包的地方
    对应的版本会自动随之更新,实现版本管理,方便维护
    两种之间的作用 :
    • 聚合用于快速构建项目,对项目进行管理
    • 继承用于快速配置和管理子项目中所使用jar包的版本
    聚合和继承的相同点 :
    • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
    • 聚合与继承均属于设计型模块,并无实际的模块内容
    聚合和继承的不同点 :
    • 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

    属性

    在父工程中 properties 标签中维护的变量,包括五种
             5.2.10.RELEASE
             4.12
             1.3.0
             jdbc:mysql://127.1.1.1:3306/ssm_db
             org.springframework
             spring-jdbc
             ${spring.version}
    1
    2         
    3         
    4                 
    5                          ../maven_02_ssm/src/main/resources
    6                          true
    7                 
    8                 
    9                          ../maven_03_pojo/src/main/resources
    10                        true
    11                
    12 ...
    13         
    14

    jdbc.properties配置文件中也可以引用maven属性 ,jdbc.url的值直接获取Maven配置的属性

    jdbc.url = ${jdbc.url}

     

     多环境

    两种方式实现不动文件快速切环境

    1. 父工程配置多个环境,并指定默认激活环境
    2. 命令行实现环境切换mvn install -P env_dep
    1. <profiles>
    2. <!--开发环境-->
    3. <profile>
    4. <id>env_dep</id>
    5. <properties>
    6. <jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url>
    7. </properties>
    8. <!--设定是否为默认启动环境-->
    9. <activation>
    10. <activeByDefault>true</activeByDefault>
    11. </activation>
    12. </profile>
    13. <!--生产环境-->
    14. <profile>
    15. <id>env_pro</id>
    16. <properties>
    17. <jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db</jdbc.url>
    18. </properties>
    19. </profile>
    20. <!--测试环境-->
    21. <profile>
    22. <id>env_test</id>
    23. <properties>
    24. <jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_db</jdbc.url>
    25. </properties>
    26. </profile>
    27. </profiles>

    跳过测试

    1. IDEA工具实现跳过测试 
    2. 配置插件实现跳过测试
            
                    
                             maven-surefire-plugin
                             2.12.4
                            
                                     false
                                    
                                    
                                             **/BookServiceTest.java
                                    
                            
                    
            

       3.命令行跳过测试 

    在pom.xml所在 目录下进行执行mvn package -D skipTests

    私服

    企业内部搭建一个类似于中央仓库的东西,把自己的内容上传上去,其他人就可以从上面下载jar包使用,用于解决团队内部的资源共享与资源同步问题

    工具:Nexus,JFrog

    以nexus为例,进入nexus-3.30.1-01\bin目录执行nexus.exe /run nexus,浏览器访问http://localhost:8081

    本地仓库访问私服配置
    1. <!--配置本地Maven对私服的访问权限-->
    2. <servers>
    3. <server>
    4. <id>itheima-snapshot</id>
    5. <username>admin</username>
    6. <password>admin</password>
    7. </server>
    8. <server>
    9. <id>itheima-release</id>
    10. <username>admin</username>
    11. <password>admin</password>
    12. </server>
    13. </servers>
    14. <!--配置私服的访问路径-->
    15. <mirrors>
    16. <mirror>
    17. <!--配置仓库组的ID-->
    18. <id>maven-public</id>
    19. <!--*代表所有内容都从私服获取-->
    20. <mirrorOf>*</mirrorOf>
    21. <!--私服仓库组maven-public的访问路径-->
    22. <url>http://localhost:8081/repository/maven-public/</url>
    23. </mirror>
    24. </mirrors>
    私服资源上传与下载
    1. 配置工程上传私服的具体位置
    1. <!--配置当前工程保存在私服中的具体位置-->
    2. <distributionManagement>
    3. <repository>
    4. <!--和maven/settings.xml中server中的id一致,表示使用该id对应的用户名和密码--
    5. >
    6. <id>itheima-release</id>
    7. <!--release版本上传仓库的具体地址-->
    8. <url>http://localhost:8081/repository/itheima-release/</url>
    9. </repository>
    10. <snapshotRepository>
    11. <!--和maven/settings.xml中server中的id一致,表示使用该id对应的用户名和密码--
    12. >
    13. <id>itheima-snapshot</id>
    14. <!--snapshot版本上传仓库的具体地址-->
    15. <url>http://localhost:8081/repository/itheima-snapshot/</url>
    16. </snapshotRepository>
    17. </distributionManagement>

    2.发布资源到私服

    mvn deploy

    maven生命周期

  • 相关阅读:
    与云idea的初见:知此软件必能成也
    Android问题笔记 - kotlin中使用Java接口,报错Parameter specified as non-null is null 快速解决
    推理优化(1)
    图形预处理工具_CogAffineTransformTool
    C语言程序——Switch分支选择程序
    【HTTP版本】HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.0等重点知识汇总
    python---socket套接字,粘包问题
    Linux-SSH反向连接(内网穿透,打洞)
    如何将 ASP.NET Core MVC 项目的视图分离到另一个项目
    池化(Pooling)的种类与具体用法——基于Pytorch
  • 原文地址:https://blog.csdn.net/roycer1/article/details/127551302