面向初学者的 5 个令人兴奋的 Maven 多模块项目创意和主题 [2022]

已发表: 2021-05-27

随着任何项目变得更加复杂和分层,管理它的正确方法是将其拆分为不同的模块。 在 Maven 中,虽然可以将这些多个项目链接为依赖项,但它使构建过程变得更加复杂。 因此,首选的方法是将项目构建为多模块,并将其余部分传递给 Maven。

目录

在 Maven 中使用多模块的好处

使用多模块而不是依赖注入或任何其他过程的显着优势是它减少了重复。 为了更好地理解这一点,假设您正在开发一个由两个模块组成的应用程序——比如说后端模块和前端模块。

如果您在这两个模块上工作并更改影响这两个模块的某些功能,则需要在没有专门的构建工具的情况下单独构建模块或组件。 或者,您必须编写脚本来编译代码、运行测试并显示最终结果。

现在,如果复杂性进一步增加并且您的项目有两个以上的模块,那么在没有专门的构建工具的情况下执行此任务将变得越来越困难。 此外,在实际问题中,您的项目可能需要一些 Maven 插件来在整个构建生命周期中执行一些关键操作、共享依赖项或包含其他 BOM 项目。

由于这些挑战,Maven 中的多模块非常有用,让您可以在单个命令行中构建应用程序的模块。 它还允许您在多个模块之间无缝共享大量数据和配置。

另请阅读:Maven 面试问题解答

关于 Maven 中的多模块项目需要了解的关键术语

1.父POM(项目对象模块)

Maven 中的每个 pom.xml 文件——为了支持继承——都有一个父 POM,称为超级 POM。 这可以位于 Maven 二进制文件中,您还可以合并这两个文件以创建有效 POM。

因此,您可以创建自己的 pom.xml 文件作为项目的父级。 完成后,您可以添加所有依赖项和配置,将其设置为子模块的父级,并启用继承。 除了继承,Maven 还提供聚合。 利用聚合功能的父 POM 称为聚合 POM——这种 POM 在 pom.xml 文件中显式声明子模块。

2.子模块

子项目,也称为子模块,可以理解为继承自父 POM 的标准 Maven 模块。 使用继承,模块共享各种依赖项和配置。 但是,如果您需要快速构建项目,则需要在 Parent POM 中显式声明子模块,使其成为聚合 POM。

3. 简单的多模块项目

App 和 util 是简单多模块项目中包含的两个模块。 需要 util 模块来提供静态方法来使用 Apache Commons Lang 库连接或附加不同的字符串,并且 app 模块是调用 util 模块所必需的。 这是 app.java 文件中的一个片段:

简单多/app/src/main/java/app/App.java

公共类应用程序{

公共静态无效主要(字符串[]参数){

System.out.println(new App().greet(“世界!”));

}

公共字符串问候(字符串名称){

return Util.join(“你好”,名字);

}

}

要构建项目,请运行

$ cd 简单多

$ mvn 清洁测试

Maven 的代码构建器以正确的顺序构建项目的两个模块,执行必要的测试,并以易于理解的摘要格式输出结果,如下所示:

4. 多模块项目的结构

这是一个简单的多模块项目的布局:

simple-multi 目录是根目录,位于整个项目的最顶部。 它包含顶级 POM(Parent POM),但这个 Parent POM 没有任何源文件夹。

顶级目录还包含 app 和 util,它们是带有目录和 pom.xml 文件的常规 Maven 项目。

顶级 POM 和模块 POM 与常规 POM 略有不同。 让我们详细了解它们包含的内容:

5.顶级POM

根目录下的 Maven 多模块项目需要 Parent POM 或顶级 POM。

与任何普通项目一样,顶级 POM 定义了重要方面和项目坐标,如 artifactID、版本和 groupID。 但是,它的包装类型不是通常的 war 或 jar 格式,而是 pom。 这是因为顶级模块不包含任何进一步的源目录。 modules/module 元素添加了 app 和 util 模块。

该文件的内容包括:

简单多/ pom.xml

<project 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”>

<modelVersion>4.0.0</modelVersion>

<groupId>org.codetab</groupId>

<artifactId>simple-multi</artifactId>

<版本>1.0</版本>

<包装>pom</包装>

<模块>

<模块>应用程序</模块>

<模块>实用程序</模块>

</模块>

</项目>

综上所述,顶层 POM 指定了 pom 打包类型,并显式列出了所有子模块。

请记住,在 Parent POM 中声明子模块时,您无需担心排序,因为 Maven 使用 Reactor 正确排序列出的模块。 在 simple-multi 中,maven 构建 util 模块,然后构建 app,因为 app 依赖于 util。

5.模块POM

Module POM 文件夹包含一个常规源文件夹和它自己的 pom.xml 文件。 这个 util/pom.xml 的内容是:

实用程序/pom.xml

<project 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”>

<modelVersion>4.0.0</modelVersion>

<父>

<groupId>org.codetab</groupId>

<artifactId>simple-multi</artifactId>

<版本>1.0</版本>

</父>

<artifactId>util</artifactId>

<属性>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<maven.compiler.source>1.8</maven.compiler.source>

<maven.compiler.target>1.8</maven.compiler.target>

</属性>

<依赖项>

<依赖>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<版本>3.6</版本>

</依赖>

<依赖>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<版本>4.12</版本>

<scope>测试</scope>

</依赖>

</依赖>

</项目>

无需指定模块的 groupID 和版本,因为它们将从父模块继承。 dependencies/dependency 块定义了 util 模块的依赖关系——commons-lang3 和 JUnit。

现在,让我们看一下 app/pom.xml,它与 util/pom.xml 非常相似,除了依赖项块,如下所示:

应用程序/pom.xml

……

<依赖项>

<依赖>

<groupId>org.codetab</groupId>

<artifactId>util</artifactId>

<版本>1.0</版本>

</依赖>

……

</依赖>

app 模块使用来自 util 模块的方法,为此,app/pom.xml 将 util 指定为依赖项。

总结上面解释的所有事情:

顶层项目(父项目),

  • 定义顶层pom.xml,指定所有坐标和子模块,并将打包类型设置为pom。
  • 包含更多模块文件夹。
  • 不包含源文件夹。

每个模块文件夹只不过是常规的 Maven 项目目录。 但是, pom.xml 文件包含:

  • parent 元素指定模块的父级。
  • 模块坐标在 artifactID 元素中指定。 未提及 GroupID 和版本,因为它们是从父坐标继承的。
  • 如果一个模块依赖于另一个模块,则依赖项将在依赖项/依赖项元素中提及。

执行多模块项目

$ mvn clean package 命令可用于编译、测试和打包多模块。 但是,要使用 maven-exec-plugin 运行它需要以下步骤:

运行以下命令:

$ cd 简单多

$ mvn 全新安装

$ mvn exec:java -pl app -Dexec.mainClass=app.App

install 命令将模块安装到本地存储库,然后您可以在其中运行项目。 选项 -pl app 通知 exec 插件有关 app 模块并运行其类 app.App。 如果不安装,构建过程将失败,因为 Maven 无法下载和解析 util 模块依赖项。

但是,每次运行前都将项目安装在本地存储库中是相当麻烦的,尤其是在开发阶段。 为了缓解这种情况,您可以直接在 Eclipse IDE 中执行多模块,而无需执行安装步骤。

从世界顶级大学在线学习软件开发课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

结论

我们希望本文能帮助您开始使用 Maven 多模块流程。 与任何新事物一样,它只是初步掌握它。 一旦您了解了基本结构和功能,您就可以在 Maven 中无缝管理多个模块。

如果您有兴趣了解有关全栈软件开发的更多信息,请查看 upGrad 和 IIIT-B 的软件开发执行 PG 计划 – 全栈开发专业化,专为在职专业人士设计,提供 500 多个小时的严格培训,9 + 项目和任务、IIIT-B 校友身份、实用的实践顶点项目和顶级公司的工作协助。

什么是多模块项目?

多模块使您能够将常用工件分组到单个模块中,以减少构建和部署项目所需的模块数量。 通过定义这些模块之间的父子关系,可以从两个或多个模块构建多模块项目。 多模块项目的父模块称为根模块。 多模块项目的子模块称为子模块。 根模块是多模块构建的基石。 子模块不能单独构建,它们必须与根模块一起构建。

maven 中的项目对象模型文件是什么?

项目对象模型 (POM) 文件是描述项目的文件。 它是开发人员将工件发布到存储库的基本工作单元。 项目对象模型是一个简单的文本文件,用于定义项目、列出其组件并定义它们的作用。 项目对象模型是 Maven 软件项目管理框架的关键组成部分。 它是组成 Maven 项目的一种特殊类型的 XML 文档。 一个 pom 文件可以被认为是一个项目的描述。 它告诉 Maven 项目是关于什么的,以及项目中每个模块的描述、它们的依赖关系和版本。 模块是 Maven 项目的构建块。 模块及其依赖项用于构建最终项目。

如何创建一个maven多模块项目?

为了制作一个 Maven 多模块项目,您需要定义一个父 pom 并确保所有子模块都继承它。 同样重要的是要注意,您还可以将所有子模块放在一个存储库中,并将父 pom 指向该存储库。 一个 Maven 多模块项目由一个父 pom 和一个或多个子模块组成。 父 pom 可以定义多模块 maven 项目元数据,如工件 Id、版本、打包和依赖项。 子模块可以继承父级的元数据,父级 pom 可以定义高级项目配置,例如项目的组织和描述。