Maven的聚集和继承-研发项目管理

>>Maven的聚集和继承-研发项目管理

Maven的聚集和继承-研发项目管理

引言:当今社会市场竞争激烈,软件开发企业想要占据前列需要在研发管理上下功夫,“向管理要效益”已经成为软件开发企业的共识,研发项目管理在软件企业中的普及也是大势所趋。国内做软件项目管理工具的开发商翼发云近几年发展十分迅速,越来越多的软件开发企业认识到研发项目管理的重要性,能切实有效降低成本,规范软件开发流程,提高软件产品质量。国内研发项目管理系统、敏捷开发管理工具的领导品牌翼发云敏捷项目管理系统采用可视化业务流程技术,支持瀑布模型等传统软件研发项目管理,同时也支持scrum等敏捷开发流程,是理想的敏捷开发管理工具,涵盖软件项目管理工作的整个生命周期。为提高国内软件开发企业的项目管理水平,分享一篇企业管理相关的知识文章。

本文将在以下三部分进行编写:

  1. 文件解析
  2. 施工顺序
  3. 选择性部署

Maven聚合即可以将多个子模块聚合在一起进行构建,继承即所有子模块均可以继承父模块的属性、依赖和插件等,可消除重复配置。 scrum

Maven基础性的知识不在此赘述,本文中涉及的Maven关键标签包括:

  • 包装:包装,普通瓶(默认),战争和POM等。
  • 模块:模块的声明
  • 属性:属性,可以定义依赖项的版本号,定义一些插件的配置,等等。
  • dependencymanagement:属地管理,与管理相关的POM,不引入依赖父模块,也不依赖于子模块介绍。依赖包的子模块声明依赖使用介绍(只有groupId和artifactId可用于指定依赖)。未讨论使用与导入范围相关的导入依赖项管理配置。
  • pluginmanagement:插件管理类似于依赖管理。此元素的配置实际上不会调用插件的行为。只有在波姆中配置相应的插件元素时,它才会起作用。
  • 存储库:用于声明远程仓库,它可以是一个私有仓库(可以通过Nexus构建)。所有POM文件继承Maven顶层POM,其中包含了Maven的中央存储库。
  • 管理:配置管理,部署到远程专家库,支持快照和稳定的版本snapshotrepository和库,分别。

举一个比较常见的例子,假设某项目project包含三个模块,分别是:project_a、project_b、project_c,其文件结构如下,三个子模块与pom.xml在同一级,与父模块是父子目录结构: 软件项目管理

/项目/ project_a / project_b / project_c pom.xml

1。POM文件解析

母模块项目

1和LT;XML?版本=“1”encoding=“UTF-8”& gt;& lt 2;项目吗?Xmlns= “http://maven.apache.org/POM/4.0.0” xmlns:xsi= “http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation= “http://maven.apache.org/POM/4.0.0 http:// maven.apache.org/xsd/maven-4.0.0.xsd” > &lt 3; modelVersion> 4.0.0< /modelVersion> &lt 4; groupId> com.test< /groupId> &lt 5; artifactId> project< /artifactId> 6 < version> 0.0.1-SNAPSHOT< &lt / version> 7; packaging> pom< /packaging> &lt 8; modules&gt 9; < module> project_a< /module> &lt 10; module> project_b< /module> &lt 11; module> project_c< /module> &lt 12; /modules&gt 1314; &lt 15; properties> < spring.version&gt 4.3.; 1.RELEASE< /spring.version> &lt 16; /properties&gt 1718; < dependencymanagement &gt;依赖& gt;& lt 19;& lt 20;依赖& gt 21;&lt;GroupID &gt;org。Spring & lt;/ GroupID & gt;& lt 22;artifactId &gt;Spring AOP & lt;/ artifactId & gt 23版&gt;&lt;{ };元春。版&lt;/版&gt;24 &lt;25 /依赖&gt;26 &lt;&gt ……依赖27; < groupId> org.springframework< /groupId> &lt 28; artifactId> spring-core< &lt / artifactId> 29; version> ${spring.version}< /version> &lt 30; /dependency&gt 31; < /dependencies> &lt 32; /dependencyManagement&gt 3334; < build> 3 5 < pluginManagement&gt 36; < plugins> &lt 37; plugin&gt 38; < groupId> org.apache.maven.plugins< /groupId> &lt 39; artifactId> maven-compiler-plugin< /artifactId> &lt 40; version> 3.1< /version> &lt 41; configuration&gt 42; < source> 1.7< /source> &lt 43; target> 1.7< /target&gt 44; < /configuration> 45 < 46 /plugin> 47 < plugin&gt…… 48; < groupId> org.apache.maven.plugins< /groupId> &lt 49; artifactId> maven-surefire-plugin< /artifactId> 50 < version> 2.12.4< /version> &lt 51; configuration&gt 52; < skipTests> true< /skipTests> &lt 53; /configuration&gt 54; < /plugin> &lt 55; /plugins&gt 56; < /pluginManagement> &lt 57; /build&gt 5859; < repositories> &lt 60; repository&gt 61; < id> nexus< /id> 62 < name&gt Maven; repository< /name> &lt 63; url> http://serverip:port/nexus/content/groups/public/< /url> &lt 64; snapshots& GT 65; < enabled> true< /enabled> /snapshots> &lt 66; &lt 67; releases&gt 68; < enabled> true&l T; /enabled> &lt 69; /releases&gt 70; &7273;71;!– release component to the PW –> 74 < 75 distributionManagement> < repository> &lt 76; id> nexus< /id> &lt 77; name> releases< /name> &lt 78; url> http://serverip:port/nexus/content/repositories/releases/&lt 79; /url> < /repository> &lt 8081; snapshotRepository&gt 82; < id> nexus< /id> &lt 83; name> snapshots< /name> &lt 84; url> http://serverip:port/nexus/content/repositories/snapshots/< /url> &lt 85; /snapshotRepository&gt 86; < /distributionManage Ment> 87 < /project>
  • 4-6线:宣布在Maven仓库组成独特的坐标;
  • 7行:包装方法是POM,聚合函数的父模块必须声明为POM,否则构建失败;
  • 8-12行:合计三个子模块project_a,project_b和project_c。每个模块的值表示当前POM相对目录。如果三个子模块与母模块并联的目录结构,该值应/ project_a。
  • 14-16:定义POM属性继承的子模块,这个声明是春天的版本号;
  • 在18-32线:配置依赖管理,对项目没有依赖,只有对应依赖真实的声明将出台。
  • 在34-57线:插件管理配置,同样依赖管理;
  • 的59-71线:配置远程Maven库,你需要配置用户名和密码在setting.xml远程Maven仓库,如下:
“服务器”与“服务器”与“服务器”;“与”;“与”;“与”;“与”;“与”;“与”;“与”;“用户名”;“与”;“用户名”;“与”;“与”;
  • 第12-21线:释放部分私人服务的配置,和其他的开发人员可以使用组件

子模块(project_a)

1和LT;XML?版本= 1?> 2 < 3 project xsi:schemaLocation= “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd 4” xmlns= “http://maven.apache.org/POM/4.0.0” xmlns:xsi= “http://www.w3.org/2001/ XMLSchema-instance” > &lt 5; modelVersion> 4.0.0< /modelVersion> &lt 6; parent&gt 7; < groupId> com.test< /groupId> &lt 8; artifactId> project< /artifactId&gt 9; < version> 0.0.1-SNAPSHOT< &lt / version> 10; /parent&gt 11; < artifactId> project_a< /artifactId> &lt 12; name> project_a< /name> dependencies> &lt 1314; &lt 15; dependency&gt 16; < groupId> org.springframework< /groupId& gt; 17 < artifactId> spring-aop< /artifactId> 18 < 19 /dependency> 20和LT;依赖性gt……21;&lt;GroupID &gt;org。Spring & lt;/ GroupID & gt;& lt 22;artifactId &gt;弹簧芯& lt;/ artifactId & gt;& lt /依赖& gt;23;& lt 24;/依赖& gt 2526;&lt;建立& gt;插件&gt;27 &lt;28 & lt;29插件&gt;&lt;GroupID &gt;org。Apache Maven。插件& lt;/ GroupID & gt;& lt 30;artifactId &gt;Maven编译插件& lt;/ artifactId &gt;31 &lt;32插件&gt;33 &lt;插件&gt ……34; < groupId> org.apache.maven.plugins< /groupId> 35 < artifactId> maven-surefire-plugin< /artifactId> 36 < /plugin> 37 < /plugins> 38 < /build> 39 < <
  • 6-10:父元素声明的模块母模块项目,其中省略了&lt;relativepath &gt;,对标识父模块POM的元件的相对位置(由父目录结构模块和子模块的确定),默认值是/ pom.xml这个例子是默认值;
  • 11-12行:既然你继承了所有的配置在父模块,你只需要声明artifactId这里,和GroupID和版本继承自父模块。name元素用于描述在找到构建日志时将显示的名称。
  • 的14-24线:意思表示真实是需要依靠,并介绍相应的依赖的模块,只有groupId和artifactId;
  • 的英语线:真正的声明需要的插件,只有groupId和artifactId;

2。施工顺序

在对工程只需 mvn clean install等命令的时候,Maven会首先解析聚合模块的POM、分析要构建的模块、并计算出一个反应堆构建顺序(Reactor Build Order),然后根据这个顺序依次构建模块。其中反应堆是所有模块组成的一个构建结构,包含各模块之间的继承与依赖关系,计算合理的模块构建顺序。(模块构建具体经历过哪些过程,可学习Maven中的生命周期)。

假设三个模块之间存在一定的依赖关系,如图: 敏捷开发流程

Maven聚合与继承

本工程的构建顺序如下,聚合模块project、project_a、project_c、project_b: 研发项目管理

[信息] [信息] [扫描项目信息]反应堆建造————————————————————————…命令:[信息] [信息]项目[信息] project_a [信息] project_c [信息] project_b [信息] [信息] ————————————————————————

还可以通过命令行对反应堆进行裁剪,包括:

  • -,也可以同时为所列出的模块构建依赖模块
  • – AMD,也使家属同时建立模块,依赖于上市模块
  • -,项目;
  • -射频,-恢复表单;

举例:mvn clean install -pl project_a,project_b

[信息] [信息] [扫描项目信息]反应堆建造————————————————————————…命令:[信息] [信息] project_a [信息] project_b [信息] [信息] ————————————————————————

mvn clean install -pl project_a -am

[信息] [信息] [扫描项目信息]反应堆建造————————————————————————…命令:[信息] [信息]项目[信息] project_a [信息] [信息] ————————————————————————

mvn clean install -pl project_a -amd

[信息] [信息] [扫描项目信息]反应堆建造————————————————————————…命令:[信息] [信息] project_a [信息] project_c [信息] project_b [信息] [信息] ————————————————————————

mvn clean install -pl project_a -amd -rf project_c

[信息] [信息] [扫描项目信息]反应堆建造————————————————————————…命令:[信息] [信息] project_c [信息] project_b [信息] [信息] ————————————————————————

三.可选的部署

在父模块中声明了distributionManagement,在执行 mvn deploy的时候,会将所有的模块部署到远程服务器上。如何做到有选择性的的部署呢?比如不想将project_a部署到Maven仓库,有两种方式:

(1)声明maven.deploy.skip在属性元素

  在project_a模块的POM文件中添加如下配置:

&lt;性能&gt;&lt;Maven。部署。跳过&gt;真正的& lt;/ Maven。部署。跳过&gt;&lt;/性能& gt;

(2)声明子模块插件以覆盖父模块插件。

在project_a模块的POM文件中,添加属于自己的部署插件:

&lt;插件&gt;&lt;GroupID &gt;org。Apache Maven。插件& lt;/ GroupID &gt;&lt;artifactId &gt;Maven部署插件& lt;/ artifactId &gt;&lt;版&gt;2.4 &lt;/版&gt;及lt;配置&gt;&lt;跳过&gt;真正的& lt;/跳过&gt;&lt;/配置&gt;&lt;/插件& gt;

小心: 在部署的时候,不想将父POM工程部署到远程仓库,此时怎么办?需要注意的是如果在父POM中声明跳过部署,则所有子POM工程继承该属性而跳过部署。解决方案:父POM声明跳过部署,子POM覆盖该属性,声明为false。

总结

  • POM的聚合和继承,前者便于构建项目,后者可以消除重构;
  • 此外,本文的例子中,你可以收集任何父模块在任何文件夹的聚合模块,只需改变模块和relativepath相对路径;
  • 通过计算各模块对反应器的依赖关系,形成合理的施工顺序,可以简化施工顺序。
  • 插件属性的配置可以配置为实现模块的可选部署。

参考资源:

  • “Maven实战”

  • 如何部署的子模块使用Maven部署?

文章从互联网整理而来,旨在传播scrum、软件项目管理、研发项目管理、敏捷开发管理工具的知识与应用,帮助软件开发企业真正了解研发项目管理的价值和意义,如果本文侵犯了您的权益或者您需要具体了解更多国内做研发项目管理系统的公司翼发云敏捷项目管理系统的相关信息,欢迎和我们联络:

【网址】www.effapp.com

2018-02-10T22:50:50+08:002018-02-15 09:10:07|Categories: scrum项目管理|