问题标签 [multi-module]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
846 浏览

java - Maven 3 使用父/子模块构建 antrun 问题

我有一个带有几个子模块的父 POM。对于其中一个,我在 build 下添加了一个 antrun 部分 - 目前这只是打印一个语句。此子模块依赖于整个集合中的其他模块(因此父模块有 8 个子模块 1 - 8,此模块(#5)依赖于 2 和 3)

antrun 部分的格式为:

如果我在父模块下执行一个操作(例如,验证或安装),这些工作正常,并且正如预期的那样,为持有这个 antrun 任务的子(#5)运行 echo 语句。

但是,如果我去子模块并从那里尝试 mvn validate 我得到(传奇)

失败。但是所有模块都存在于我的本地存储库中,并且它们是最新的。对于再次执行 mvn install 这个问题的通常解决方法并不能解决它。

对我来说,这看起来像是一个错误,除非其他人知道(到底是什么)出了差错。

克里斯

0 投票
4 回答
3788 浏览

maven - 三级pom(公司-项目-模块)-模块项目的问题

我正在使用带有 m2e 的 Eclipse Indigo(它连接到 Maven 3.0.3 的外部二进制文件)。

现在,我的应用程序的预期结构如下:

我设置了我的 pom,使得 Company-parent 是 Project-parent 的项目,而 Project-parent 是所有模块的父级。公司母公司和项目母公司似乎没问题。两者都是包装类型 POM。

第三个层次是我开始遇到问题的地方。即使定义了最简单的模块项目,我也会遇到各种 Maven 错误和各种奇怪的行为。

公司母公司:

项目父:

模块pom:

我不能做“Maven -> 更新项目配置”,因为当我这样做的时候,我得到了这个错误:

我收到的其他一些错误:

还收到有关 m2e 忽略模块中我的插件目标之一(来自公司级别的 pom)的错误。我在这里遗漏了一些明显的东西吗?帮助!

谢谢 :)

0 投票
1 回答
833 浏览

maven - 打包多平台多模块maven项目

我正在参与一个开源项目 ( ps3mediaserver ),该项目已从 google 代码 (SVN) 和 ANT (用于构建任务) 转移到 git (GitHub) 和 maven。我有自己的 fork(称为 pms-mlx),我想在其中维护一些插件,作为发布时默认打包的一部分。我对 Maven 很陌生,不太确定项目应该如何构建以尊重 Maven 方式。
我将首先描述环境以前的行为方式,然后给出关于迁移到 maven 的想法。

链接:

旧行为:

项目结构:

主项目是 ps3mediaserver_mlx,所有插件都位于 workspace/plugins 文件夹的子文件夹中。
ps3mediaserver_mlx/build.xml 包含一个目标 BuildWithoutLibs,它将构建主项目的 jar 并将其复制到 workspace/pms_no_libs.jar,然后插件将引用(在此位置)。
执行任何插件的构建目标时,将构建插件并将生成的 jar 复制到 ps3mediaserver_mlx/plugins/[plugin_name].jar。
最后,当使用 ps3mediaserver_mlx/build.xml 中的构建目标打包应用程序时,workspace/ps3mediaserver_mlx/plugins 中包含的插件将被打包(在 Windows 的 exe 安装程序中,在 OSX 的 dmg 或 linux 的 tar.gz 中)。

新行为 项目结构已更改为:

职责:
global-pom包含 pms 使用的所有依赖项的根 pom。这允许使用相同的版本,而无需在任何插件中重新声明它们(这是个好主意吗?)。构建所有内容并包含一个模块部分以在所有项目上执行相同的 Maven 命令

pms-pom : 从 global-pom 继承并构建 pms jar

plugins-pom : 从 global-pom 继承;包含对 pms 的依赖(所有插件都需要);包含必须构建的所有模块的列表

pluginX-pom:继承自 plugins-pom 并包含插件的自定义配置

package-pom:负责根据构建的平台打包pms。

这种结构是否代表了使用 maven 的方式?

一切都在包装。这意味着主应用程序 jar 以及所有插件都已构建并需要打包。package-pom 负责做到这一点。
在原始应用程序中只有一个pom.xml并且正在使用 Windows、Linux 和 OS X 的不同配置文件进行打包。我目前正在处理的一个是用于 OSX 并使用osxappbundle-maven-plugin,但是源代码永远不会打包在应用程序文件中。那是因为打包项目不再从实际项目继承。
如何引用构建的 jar 以便正确打包到应用程序文件中?
我尝试在附加资源中引用 jar 并作为自定义类路径,但从未成功。

0 投票
1 回答
3097 浏览

maven - Maven - 将插件执行委托给子模块

我有一个超级 POM 收集它的 2 个子子模块的版本、插件和依赖项定义:一个用于 webapp(使用 jetty:run 运行),另一个用于 DB 迁移(使用 liquibase:update “运行”)。

只要我将目录更改为子模块之一,它就可以正常工作。但是,当我在父 POM 上运行 jetty:run 或 liquibase:update 时,我希望看到插件执行“转发”到相应的子模块。

你知道这样的事情是否可以实现吗?

提前致谢,

罗尔夫

PS:抱歉更新晚了

父 POM

数据库迁移

网页端

0 投票
1 回答
1390 浏览

maven-2 - 如何在 Maven 多模块构建中混合父 POM?

我有一个 Maven 多模块项目,在这个构建中我需要两个不同的父 POM。第一个是项目中大多数模块的真正父 POM,但一个模块是演示项目,它使用完全不同项目的父 POM(因为它是如何使用我的项目为第二个项目生成代码的演示)。

构建有效,但我收到警告:

由于other_project不是我构建的真正模块,它可以在任何地方。这意味着我不能给出相对路径。

我该如何解决这个警告?

0 投票
0 回答
353 浏览

maven - Maven Multi Module Project-jars 没有从一个模块继承到另一个

我创建了一个多模块项目基础结构。我有另一个类似且运行良好的多模块项目基本代码(由其他人创建)。这两个项目都有相同的模块和相似的 POM。两者都是企业项目意味着两者都部署到耳文件中。我对多模块 maven 和 ear 项目有些陌生。

我有一个 web 模块,而 ear 模块引用了 web 模块。在我的耳朵 pom Iv 中提到了 web 模块作为 (not ) 下的依赖项现在在工作项目中,所有 jar 都来自一个名为“Ear Libraries”的库中的 ear 到 web 模块。我们可以在工作项目的 web 模块的“Java EE 模块依赖项”中看到这些 jar。

但是这些罐子没有显示在我创建的项目的 web 模块中,因此所有外部类(如 smartgwt 类)都会引发错误。POM 类似。我什至将项目导入到另一个工作区,但现在可以使用。项目被破坏了吗?我要从头开始吗?

编辑

这不是 POM 的错。我在两个应用程序中使用相同的 POM(只需复制粘贴并更改应用程序的名称)。它们具有相同的结构,相同的模块。我正在使用 M2Eclipse 0.9.9 和 RAD 7.5

工作项目网络模块图片 在此处输入图像描述

不工作 在此处输入图像描述

我们可以在 EAR Libraries 下看到,jar 反映在 Working 项目中,但没有反映在 Error-Project 中。

0 投票
3 回答
3872 浏览

maven - 有没有办法打印多模块 maven 项目的结构?

我正面临一个相当大的多模块 Maven 项目。我想看看根(父)项目是如何以 groupId:artifactId 的形式由子项目/子项目组成的(可能有一些标识来反映层次结构。

当然,我可以编写自己的插件来获取此打印输出,但我认为货架上肯定有一些可用的东西。

0 投票
4 回答
3132 浏览

maven - 如何从具有所有优点的多模块 Maven 项目继承?

我找不到一个好的、可扩展的解决方案的问题:

我有一个项目可以提供给定工件的多种风格。这已被设置为一个多模块项目,目前有 3 个模块:

  • /flavor1_module
  • /flavor2_module
  • /flavor3_module

问题是我还有另外 50 个项目需要以相同的方式设置,即提供 3 种风格。

考虑的解决方案:

  1. 将已经创建的多模块项目变成所有其他 50 个项目的父项目
    • 缺点:它只是不起作用。保存在父模块中的指令不会被继承,因此它们不会被执行。
  2. 使用maven-archetype-plugin创建一个多模块项目模板,然后基于该模板创建全部 50 个项目
    • 缺点:如果我需要 flavor4,我需要手动更新所有 50 个项目以添加 flavor4_module(并复制其内容)。不可扩展。
  3. 将所有风味的配置嵌入到单个 pom 中,并根据配置文件启用或禁用它们(即使用配置文件组合而不是通过模块继承)。然后将 50 个项目指向它,作为它们的父级。这将创建“内联”模块
    • 缺点:我需要实现我自己的机制,这些机制由开箱即用的模块提供。(例如,在单独的目录中构建每种风味)。我也会失去模块提供的清晰分隔。

任何想法如何做得很好?还有其他选择吗?

谢谢,卢卡斯

编辑:

另一种选择是使用reactor:inject-modules目标扩展maven-reactor-plugin,该目标将从外部工件下载模块定义,并将其定义附加为普通模块。这将动态创建一个新模块。然后所有 50 个项目都可以将此 pom.xml 作为其父项。

配置看起来像这样(草稿):

走这条路有意义吗?

更新:

编写一个操作要执行的模块列表的插件(我上面描述的模块注入的想法)似乎无法实现,因为模块是由 maven 核心处理的,并且该机制不是为了扩展而设计的一个插件。这可以通过两个插件完成类似工作的事实得到证实,即操纵要执行的项目列表:

通过执行系统调用来创建 Maven 子进程来解决问题。对我来说,这不是要走的路,因为它是一个非常不稳定的解决方案。实际上maven-reactor-plugin变得与 Maven3不兼容。

maven-invoker-plugin看起来仍然很有希望。该插件最初设计用于运行集成测试,但可以使用它来扩展例如编译阶段。但它要求将子 pom.xml-s 视为资源并即时修改。对于我在此处描述的问题,解决方案将过于复杂且不稳定。我更喜欢在构建 maven 模型时可以在内存中运行的更轻量级的东西。

所以现在我使用配置文件,试图使它们尽可能紧凑。可能在一段时间内,我需要再次考虑这个问题。

0 投票
1 回答
1642 浏览

eclipse - eclipse下同一个多模块maven项目的多个版本

我想在eclipse下处理同一个多模块maven项目的两个不同版本。

不幸的是,当您在eclipse下导入多模块maven项目时,您可以自己更改父模块项目名称,以防止冲突,但不能更改子模块项目名称。子模块作为根项目导入,以模块名称命名。显然,在导入期间无法重命名它们。

在理想情况下,我想保持 pom 原样。显然我想保持相同的日食工作区......

0 投票
3 回答
13998 浏览

java - 如何重构 Maven 多模块项目?

我为这篇文章的长度表示歉意,但我在不展示图片的情况下无法使其更简洁。我最近接手了一个 maven 3.0 多模块项目的 build-master 工作。问题是项目/模块的结构是一场灾难。从当前存储在源代码控制中的方式(我们使用 RTC)到模块的 pom 结构,我都在竭尽全力尝试每次都完成一个完整的构建周期。

作为项目层次结构,所有模块都“扁平”存储;即:一切都在同一水平。我有一个父 pom,所有模块都依赖于父级。但是,父级与我的所有其他模块处于同一级别。

前任:

父 pom 定义了构建项目所需的所有模块,以及在不同子模块中使用的工件版本号的一堆属性:

反过来,每个模块的 pom 通过 pom 的工件编号依赖于父 pom:

更令人困惑的是,实际的工件名称可能(取决于模块)与模块路径匹配,也可能不匹配。例如, module1 可能位于 path 中c:\dev\MyEarProject\module1,但具有 artifact name hibernate-module。但是,由于它在 RTC 中的存储方式,在module1签出时会调用该目录。

当然,构建一切的最简单方法是进入c:\dev\MyEarProject\parent-pom\并运行mvn clean deploy. 这在 SNAPSHOT 模式下工作正常,因为 SNAPSHOT 存储库允许同一工件版本的多个部署。但是在发布模式下,这会失败。

这种结构给我带来了两个问题。

  1. 每次我需要对父级中的属性进行版本更改时,我都必须更新父级 pom 版本号,以及所有子模块父级 pom 的版本,以及所有子模块本身的版本(因为父级更改了)。
  2. 每当我需要部署发布周期时,如果其中一个模块自上一个周期以来没有更改并且因此无法重新部署到同一个 repo(repo 不允许覆盖现有工件),mvn 将引发错误

所以我正在寻找重组这个项目以避免这些问题的最佳方法。对于父 pom,我知道我可以使用相对路径来指向父级。但是,鉴于模块的“扁平”结构,这是一种推荐的方法吗(即:父 pom 相对路径将是 ../parent-pom/pom.xml - 对我来说似乎有点奇怪)?此外,鉴于父级的版本控制独立于模块,使用相对路径不仅会导致额外的混乱(即:无法知道父级 pom 的哪个版本与哪个版本相关联子模块)。

其次,如何在不遇到部署错误的情况下构建整个耳朵?由于工件已经存在于 repo 中,我不需要重建和重新部署它。我尝试使用 --projects 但由于涉及的模块数量众多,管理起来非常困难。