Maven进阶

1.分模块开发

​ 步骤:
​ ①在该模块pom依赖里面引入另一个模块的坐标(在pom里面有)
​ ②然后对该模块进行install打包,把他打包到本地仓库(因为idea能找不到坐标,但是本地仓库没有)

2.依赖管理

​ 依赖传递
​ 依赖具有传递性,可间接传递也可也直接传递,但是会出现冲突
​ 依赖冲突问题
​ 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
​ 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
​ 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
​ 可选依赖
​ 概述:可选依赖指对外隐藏当前所依赖的资源—不透明
​ 在依赖里面加一个属性optional,设置为true表示隐藏
​ 可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源将不具有依赖传递-
​ 排除依赖
​ 在主要模块pom里面的依赖添加属性 ,并把不需要的依赖坐标写里面

3.聚合与继承

​ 所谓聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合
​ 聚合工程:通常是一个不具有业务功能的”空”工程(有且仅有一个pom文件)
​ 作用:使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
​ 当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题。

聚合工程创建:①创建一个maven模块,然后设置打包类型为pom
            ②设置当前聚合工程所包含的子模块名称
                <moudles>
                    <moudle>../maven_ssm</module>
                </modules>
注意:顺序不用管,他自己会按照依赖进行顺序构建

继承
所谓继承:描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。
作用:
    简化配置
    减少版本冲突

配置关系
在pom文件里面用<parent>标签输入组,id,版本,指明他的父类,并指出路径

子类不用定义依赖,可以直接用父类的,并且跟父类是同步的,方便统一管理
同时可以在下面定义依赖管理<dependencyManagement>,在这个标签里面定义可选依赖的坐标,子类如果想用需要直接在依赖导入可选依赖坐标即可,但是不能配置版本,如果配了就不属于父类管理了

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

4.属性

​ 定义属性
​ 在pom文件里面定义标签然后直接定义属性即可用<属性>值</属性>,直接给版本号用属性代替,方便统一管理,取值用${属性名}即可

资源引用属性
如果要把数据库的properties文件的属性也放到pom里面统一管理
步骤:①先把jdbc.url等属性定义到pom里面
      ②配置文件中引用属性,就是把值换成取值符合那种形式${}
      ③然后开启资源文件目录加载属性的过滤器
      	<build>
            <resources>
                <!--设置资源目录-->
                <resource>
                    <directory>${project.basedir}/src/main/resources</directory>
                    <!--设置能够解析${},默认是false -->
                    <filtering>true</filtering>
                </resource>
            </resources>
        </build>
    注意:${project.basedir}: 当前项目所在目录,子项目继承了父项目,相当于所有的子项目都添加了资源目录的过滤

    此时打包发现出现错误,需要web.xml文件才能打包
    解决方法一:直接加一个web.xml
    解决方法二:在bulld里面加一个插件属性重新编辑maven-war-plugin,并且给出配置属性<configuration>定义<failOnMissingWebXml>为false

    maven还有他内置的系统属性,${project.basedir}就属于内置的

5.多环境开发

​ 定义多坏境定义各个环境,并给出id即为名字然后可以设置属性值,同时可以用里面设置默认环境,不过一般还是在idea右边的maven里面点击m图标,输入mvn install -P id进行用该环境打包

6.跳过测试

​ 方法一点击maven,里面有个蓝色的M图标,点击即可跳过所有测试
​ 方法二还是插件的方法,编辑maven-surefire-plugin设置配置属性即可
​ 方法三指令mvn package -D skipTests

7.私服

​ 仓库分三大类
​ ①宿主仓库hosted
​ 作用:保存无法从中央仓库获取的资源
​ 自主研发,第三方非开源项目,比如Oracle,因为是付费产品,所以中央仓库没有,关联上传操作
​ ②代理仓库proxy
​ 作用:代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库,关联下载操作
​ ③仓库组group
​ 作用:将若干个仓库组成一个群组,简化配置,仓库组不能保存资源,属于设计型仓库

资源上传与下载
在工程中配置私服的位置
①<distributionManagement>该标签配置私服
②然后配置<repository>表示正式版本,<snapshotRepository>表示快照版本
③然后配置对应的id和地址即可
④然后用deploy指令