zoukankan      html  css  js  c++  java
  • Maven 之多模块构建

    项目的打包类型:pom、jar、war

      项目中一般使用maven进行模块管理,每个模块下对应都有一个pom文件,pom文件中维护了各模块之间的依赖和继承关系。项目模块化可以将通用的部分抽离出来,方便重用;修改一部分代码不再是build整个项目,缩短了build时间;此外各模块都有自己的pom文件,结构更清晰。

      使用maven进行模块划分管理,一般都会有一个父级项目,pom文件除了GAV(groupId, artifactId, version)是必须要配置的,另一个重要的属性就是packaging打包类型,所有的父级项目的packaging都为pom,packaging默认是jar类型,如果不作配置,maven会将该项目打成jar包。作为父级项目,还有一个重要的属性,那就是modules,通过modules标签将项目的所有子项目引用进来,在build父级项目时,会根据子模块的相互依赖关系整理一个build顺序,然后依次build。

      而对于各个子项目,需要在其对应的pom文件开头申明对父级项目的引用,通过GAV实现。对于子项目自己的GAV配置,GV如果不配置,则会从父级项目的配置继承过来。子模块可通过dependencies标签来添加自己的依赖,此外子类项目的packaging值只能是war或者jar,前面已经说过,packaging默认是jar类型。如果是需要部署的项目,则需要打包成war类型,如果只是内部调用或者是作服务使用,则推荐打包成jar类型。

    1. packaging

    packaging给出了项目的打包类型,即作为项目的发布形式,其可能的类型。在Maven 3中,其可用的打包类型如下:

    jar,默认类型
    war
    ejb
    ear
    rar
    par
    pom
    maven-plugin
    2.multi-modules

    Maven 3支持Maven项目的多模块(multi-modules)结构。这样的Maven项目也被称为聚合项目,通常由一个父模块和若干个子模块构成。

    其中,父模块必须以pom打包类型,同时以<modules>给出所有的子模块。父模块的POM示例如下:

    ...
    <packaging>pom</packaging>
    
    <modules>
    <module>my-frontend-project</module>
    <module>my-service-project</module>
    <module>my-backend-project</module>
    </modules>
    ...


    其中的每个module,都是另外一个Maven项目

     一个项目可能会有多个子module,在特定情况下可能只需要build其中几个module。

    例如我的项目的目录结构如下

    myproject

    |------------module_one

    |------------module_two

    |------------module_three

    |------------module_four

    |------------module_five

    |------------module_six

    |------------module_seven

    |------------pom.xml

    解决方法一:

    例:我想要build module_three,module_five,module_seven三个子module

    在根pom同一级目录运行如下命令:

    mvn clean install -pl module_three,module_five,module_seven

    也可以在此命令上加上以下参数

    -am 不仅build module_three,module_five,module_seven这三个,而且build这些子module require的其他项目,require是指其parent项目。

    -amd 不仅build module_three,module_five,module_seven这三个,而且build依赖这三个module的项目,如module_other。

    解决方法二:

    增加一个profile,如:

    复制代码
    <profiles>      
      <profile>
                <id>patch_001</id>
                <properties>
                    
                </properties>
                <modules>
                    <module>module_three</module>
                    <module>module_five</module>
                    <module>module_seven</module>
                </modules>
            </profile>
    </profiles>
    复制代码

    然后运行maven命令:

    mvn clean install -Ppatch_001  #这样也可以只build这三个子module

    PS:我采用第二种方法的时候,发现在profile这样定义了所要build的module后,

  • 相关阅读:
    go语言中通过http访问需要认证的api
    Mysql两个time类型计算时间相减
    gorm中数据库datetime类型的映射和time.Time的格式化
    最详细的六种装饰器写法,学不会你找我!
    深度学习中的四种激活函数
    看完这篇文章,相信我,你已经掌握正则表达式了!
    新手还在问学Python应该看什么书,老手已经进来下载了(附100本pdf电子书下载)
    Python轻松实现一个毕业生信息管理系统!
    Python一键搞定批量合成PDF
    网易云10万+音乐竟然能用Python一键下载!
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/10062019.html
Copyright © 2011-2022 走看看