2020-11-28

Maven 基础知识(一)工程结构

maven工程结构分为继承和集合,通过继承可以让多个子模块共享配置在父模块中的配置信息,通过集合可以让我们在父模块执行命令时,递归的对子模块进行相同的处理。

下面以模块com.mycompany.app:my-app:1

<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version></project>	

和模块com.mycompany.app:my-module:1为例来进行说明

<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-module</artifactId> <version>1</version></project>	
  1. 继承,通过在子模块中指定 <parent>元素来实现

    1. 场景1:子模块所在的目录是父模块的子目录

      . |-- my-module | `-- pom.
      • 其中my-module/pom.是com.mycompany.app:my-module:1的POM,pom.是com.mycompany.app:my-app:1的POM

      为了把my-app变成my-module的父模块,可按如下修改my-module/pom.

      <project> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> </parent> <artifactId>my-module</artifactId></project>
      • 在子模块中追加了<parent>元素
      • 去除了my-module/pom.中的<groupId><version>,默认使用从父模块继承到的属性值
    2. 场景2: 子模块所在目录不是父模块的子目录

       |-- my-module | `-- pom.
      • 其中parent/pom.是com.mycompany.app:my-app:1的POM,这个例子也告诉我们工程目录名parentartifactId的值可以不一样,但在实际应用中,我们一般会保持目录名和artifactId一致,这里只是为了说明my-app是父模块

      为了把my-app变成my-module的父模块,可按如下修改my-module/pom.

      <project> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> <relativePath>../parent/pom.
      • <parent>元素中追加<relativePath>,相对路径的起始目录是当前子模块的路径

    通过继承,子模块可以从父模块继承到如下元素

    groupId versiondescriptionurlinceptionYearorganizationlicensesdeveloperscontributorsmailingListsscmissueManagementciManagementpropertiesdependencyManagementdependenciesrepositoriespluginRepositoriesbuild	plugin executions with matching ids	plugin configuration	etc.reportingprofiles
  2. 聚集,通过在父模块中指定<modules>

    一个模块设定到父模块的<modules>后,当在父模块执行maven命令时,将在所有子模块中递归执行

    通过以下两步可以将子模块聚集到父模块中

    • 将父模块pom.中的<packaging>属性值设置成pom
    • 在父模块中的<modules>元素中指定子模块的路径
    1. 场景1:子模块所在的目录是父模块的子目录

      . |-- my-module | `-- pom.
      • 其中my-module/pom.是com.mycompany.app:my-module:1的POM,pom.是com.mycompany.app:my-app:1的POM

      为了把my-module聚集到my-app模块下,可按如下修改my-app/pom.文件

      <project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> <packaging>pom</packaging> <modules> <module>my-module</module> </modules></project>
      • 追加<packaging>pom</packaging>,默认是jar
      • 追加<modules>,其中<module>中指定子模块的目录位置,是一个相对路径,起始路径是父模块的目录
    2. 场景2:子模块所在的目录不是父模块的子目录

      . |-- my-module | `-- pom.
      • 其中parent/pom.是com.mycompany.app:my-app:1的POM

      通过相对路径把把my-module聚集到my-app模块下

      <project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> <packaging>pom</packaging> <modules> <module>../my-module</module> </modules></project>
  3. 继承 VS 聚集

    当有多个maven工程,如果想实现所有工程共享一些配置信息,可以采用 继承 的模式,把公共信息配置到一个工程里,再把其他的工程中的<parent>指向这个工程。

    如果想实现对一批maven工程,同时进行编译、发布等操作,可以采用 聚集 的模式,创建一个parent工程,把这一批工程都作为parent工程的<modules>,这样我们对父工程进行操作时,就可以递归的对所有module进行处理。

    当然我们也可以同时使用继承 聚集,即在子模块中指定<parent>,同时也在父模块中指定<modules>

    按如下模块路径举例:

    . |-- my-module | `-- pom.
    • my-module/pom.是com.mycompany.app:my-module:1的POM
    • parent/pom.是com.mycompany.app:my-app:1的POM

    此时,为了同时利用继承和聚集,可做如下修改

    com.mycompany.app:my-app:1的POM

    <project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> <packaging>pom</packaging> <modules> <module>../my-module</module> </modules></project>

    com.mycompany.app:my-module:1的POM

    <project> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> <relativePath>../parent/pom.








原文转载:http://www.shaoqun.com/a/493318.html

f2c:https://www.ikjzd.com/w/1242

转运四方:https://www.ikjzd.com/w/1342

笨鸟海淘:https://www.ikjzd.com/w/1550


maven工程结构分为继承和集合,通过继承可以让多个子模块共享配置在父模块中的配置信息,通过集合可以让我们在父模块执行命令时,递归的对子模块进行相同的处理。下面以模块com.mycompany.app:my-app:1<project><modelVersion>4.0.0</modelVersion><groupId>com.mycompany.a
贝恩:贝恩
gem:gem
福建武夷山龙井山自驾游怎么走?:福建武夷山龙井山自驾游怎么走?
六盘山旅游注意事项 :六盘山旅游注意事项
选品新思路:跨境电商卖家是如何从1688找爆款的?:选品新思路:跨境电商卖家是如何从1688找爆款的?

No comments:

Post a Comment