当前位置: 首页 > 知识库问答 >
问题:

Maven多模块项目的生成顺序?

臧兴学
2023-03-14

情况是,我有两个结构相同的Maven多模块项目:

Parent
    - Module 1
    - Module 2

当我构建项目1时,我看到首先构建的是parent(顺序是parent->module1->module2)。然而,对于项目2,最终生成父级(顺序为module1->module2->parent)。为什么两个项目的建造订单不同?此外,如何手动控制生成顺序?

更新1:
两个父项目都是简单的POM项目,没有源代码,所以我无法按照依赖关系图解释构建顺序。

更新2:
除了GAV和子模块名之外,父POM都相同:

<?xml version="1.0" encoding="UTF-8"?>
<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>parent-group-id</groupId>
    <artifactId>parent-artifact-id</artifactId>
    <version>parent-version</version>
    <packaging>pom</packaging>
    <name>parent-name</name>
    <modules>
        <module>module-1</module>
        <module>module-2</module>
    </modules>
</project>

共有2个答案

贺山
2023-03-14

在高层,构建顺序基于模块依赖图的拓扑类型。

编辑:您的问题。我知道项目1包含两个模块,项目2也是。但是项目2中的模块是否显式地将“父级”pom声明为父级?我想也许您的project 1模块显式声明父pom,而project 2模块不声明。这意味着project 2的“父级”根本不是父级,因此不必在模块之前构建。反正那是我的猜测。

盛城
2023-03-14

构建顺序由Maven reactor确定,这是一种通过对项目进行排序来自动确保多模块构建的正确构建顺序的机制。

有关它的工作原理,请参阅官方文档。

上面写着:

在对项目进行排序时,应遵守以下关系:

  • 项目依赖于生成中的另一个模块
  • 插件声明,其中插件是构建中的另一个模块
  • 插件依赖于生成中的另一个模块
  • 生成中另一个模块的生成扩展声明
  • 元素中声明的顺序(如果没有其他规则适用)

不能手动控制生成顺序。如果你想改变顺序,你必须对影响反应堆排序顺序的项目进行更改。

 类似资料:
  • 我曾广泛使用过Maven 目前有5个不同的maven项目,每个项目都有一个不同的pom.xml。到目前为止,它们之间存在依赖关系,如果需要,每一个都指向 中的另一个。 现在我们不喜欢的是 当我们发布子projectA时,我们需要手动修改所有将projectA作为依赖项的项目以使用新版本。Saw Maven有一个版本插件,不知道这会有什么帮助。 作为解决方案,我希望在POM之间有一个更干净的组织,并

  • 我有一个多模块maven应用程序,我们需要通过Jenkins构建。项目结构如下: 现在,mvn清洁安装-fa.xml工作正常。为此,我创建了一个詹金斯的工作。现在,和a.xml一样,我有另一个项目b.xml.b.xml有和a.xml相同的代码,除了不同的Ids。所以,我又为詹金斯创造了一份工作b.xml.两份工作都很好。但是,现在我想根据我们在Git中提交的项目,从单个Jenkins工作中构建这两

  • 关于maven项目结构,我有两个问题: 1)我正在创建一个maven多模块项目,并且想知道是否可以将模块的所有公共依赖项放在父POM中?这是正确的做法吗? 2)如果我正在创建一个包含所有web.xml和JSP文件的maven webapp项目,那么web控制器、侦听器和模型对象应该驻留在哪里?在一个单独的maven jar项目中还是在同一个webapp项目中?

  • 我有以下Maven项目结构: i、 e.Project1、Project2和Project3在目录结构上是对等的,它们都是Spring Boot应用程序(JAR)。我想将Project2和Project3视为Project1的子项,而不改变目录结构。当我在父项目上执行相同的maven命令时,我需要在子项目上过渡地执行所有maven命令。而且最重要的是,我应该能够将它们打包到一个JAR文件中。我在谷

  • 问题内容: 这是一个基本问题,我只是不太熟悉Maven多模块结构。说,我有一个Web应用程序。我想将一些模块连接到它(某些服务)。我是否需要仅将其中一个模块(依赖于其他模块)制作为一个Web应用程序,然后运行它?一开始我以为我可以运行整个项目,但是这个选项在我的IDE中是无效的(我现在正在使用NetBeans),这使我认为我应该运行一个类似于主模块的东西(在这种情况下为Web应用程序) )。是这样

  • 父项目为demo-mybatis子模块为mybatis-dao、demo-service。demo-mybatis pom.xml如下: 4.0.0 pom mybatis-DAO Demo-service Demo-mybatis-app org.springframework.Boot spring-boot-starter-parent 2.3.2.release com.example D