《Maven实战》阅读笔记(三)

继承与聚合

继承与聚合,我感觉对于多模块项目用的很多。

1.继承

项目可通过继承,继承得到一些pom元素,例如dependency、groupId等等,提高pom元素的重用,避免项目的pom过于臃肿。

在子模块项目的pom.xml中使用parent标签指定,父模块的pom的packaging标签下必须为pom

//子模块的pom.xml
<parent>
    <groupId>xx.xx.xx</groupId>
    <artifactId>xx</artifactId>
    <version>xx</version>
    <relativePath></relativePath>//继承的pom相对路径。可选,默认为../pom.xml,即父级目录下的pom
</parent>

可继承的元素

继承元素
groupId所以子类的groupId可以不写
version所以子类的version可以不写
properties自定义的Maven属性
dependencies项目的依赖配置
dependencyManagement项目的依赖管理配置
repositories项目的仓库配置
distributionManagement项目的部署配置
2.聚合

针对多模块项目,为实现同时构建多个项目,而不需要对每个项目都执行一遍maven命令,可聚合多个项目。

聚合的pom中的packageing必须为pom,这点与继承是一致的。

<moudles>
    <moudle>模块一</moudle>
    <moudle>模块二</moudle>
</moudles>
3.反应堆的构建顺序

聚合解决了多模块的构建问题,继承消除了多模块的重复配置。那针对多模块的构建,子模块之间可能还互相依赖,这时候mavne的构建顺序是什么呢?

多模块的maven反应堆,遵循先读取先构建,存在依赖先构建依赖的原则。因此maven不允许出现循环依赖,即A->B,B->A的情况出现,否则报错。

4.约定大于配置

为什么说约定大于配置,为什么源码放在src/main/java下,为什么项目的目录张这个样子?

所有的maven项目都会继承自一个超级pom文件,一般来说,文件在$MAVEN_HOME/lib/maven-model-builder-x.x.x.jar中的org/apache/maven/model/pom-4.0.0.xml
路径下。在这个项目中有着大量关于项目结构的配置,例如远程仓库地址(中央仓库)、插件仓库地址、代码输出目录、源代码目录、主资源目录、测试代码目录。

我们只需要花费很少的代价(自由),遵循Maven的规范,就能轻松的构建项目,而不是手动配置。这就是约定大于配置以及为啥目录长这样的原因。

当然我们也可以手动配置,而不去遵守这种约定

//项目的pom.xml下

<build>
    <sourceDirectary>/xx/xx</sourceDirectary>//手动配置源码目录
    ......
</build>

灵活的构建

1. maven的属性

除了可以在一个项目中 使用properties元素自定义一些属性外,还有很多内置属性,${basedir}表示项目根目录,即包含pom.xml文件的目录;${version}表示项目版本等等

2.profile机制

为了方便的切换环境,可以使用maven提供的profile机制。

<profiles>
    <profile>
        <id>xx</id>
        <properties>
            <xx>自定义属性</xx>
        </properties>
        <activetion>
            <activeByDefault>true</activeByDefault>//默认环境
        </activetion>
        //不同环境下的配置
    </profile>
    <profile>
            <id>xx</id>
            <properties>
                <xx>自定义属性</xx>
            </properties>
            //不同环境下的配置
     </profile>
</profiles>

虽然项目中的profile可配置属性很多,但是只能在这一个项目中使用,这并不是切换环境的本意。一般将profile放在用户目录下的setting.xml下。
用户目录下的setting.xml可配置的profile属性很少,只有repositories、pluginRepositories、properties这几个。

激活profile除了在profile中使用activeByDefault,还可以在setting中使用activeProfile元素

<setting>
......
    <activeProiles>
        <activeProfile>Profile的Id</activeProfile>
    </activeProiles>
......
</setting>

实际上,也可以在IDEA的maven中选中不同的Profile。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值