问题标签 [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 回答
2515 浏览

gwt - 大型 GWT 项目的结构

语境

  • 具有多 maven 模块或单个 maven 模块结构的大项目

问题

  • 您最终使用了多 maven-module 还是单 maven-module 结构?

细节

如果您从事过一个开发周期长且包含大量功能的大型项目(即不是一个琐碎的项目),您是选择将项目拆分为多个 maven 模块还是采用单模块方法?

例如,具有多模块结构,在运行 mvn gwt:eclipse 之类的 maven 命令时会崩溃(请参阅http://bit.ly/gs4Rmo)。我想这对于单模块 GWT 项目会很有效。并且可能还有其他类似上述的命令存在多模块结构问题。

但是,多模块结构可以带来更快开发的好处,即如果您将“服务器”模块与“客户端”模块分开,您可以单独编译业务逻辑(服务器)并将其打包到生成的 Web 存档中。编译 GWT 代码大约需要 20 秒,所以如果你只修改服务器包,从长远来看,它可以为你节省大量时间。

在处理多模块/单模块项目时,您还遇到过哪些类似上述情况的情况?

谢谢!

0 投票
2 回答
16887 浏览

maven - 没有(远程)存储库的 Maven?

我有一个 Maven 2 多模块项目,并希望确保所有内容都取自我的本地签出源。

  • 是否可以告诉 Maven 永远不要为它的源模块下载任何东西?我必须禁用远程存储库吗?
  • Maven 是否总是必须采用昂贵的方式将模块安装到本地存储库中,然后为每个依赖项再次提取它?
  • 如果本地源发生更改,Maven 是否会自动重新编译模块的依赖项,然后编译依赖项?
0 投票
1 回答
3382 浏览

java - 在 Subversion/Maven/Hudson 中管理大型多模块项目

我们有一个相当大的 Java 应用程序,其中包含大量的 Maven 工件。每个子系统在 subversion 树中都有自己的文件夹,其中包含 trunk/、branches/ 和 tags/ 子文件夹,并托管多个工件。Maven POM 的层次结构有多个级别。甚至依赖管理也被分成不同的模块。该应用程序被部署为多个 WAR 和其他 Zip/JAR 内容。

在构建和部署它的过程中,我经常不得不将应用程序视为一个单元。我遇到了很多我想在这里分享的困难。

  1. Subversion 布局:首先我不能只用一个命令检查整个代码库。当我从顶层开始检查所有子项目的所有分支时,它太大了,而且会花费太长时间。我想减少工件的数量目前并不是一个真正的选择,因为它会导致太多的根本变化。但可能是具有聚合分支文件夹的不同颠覆布局确实会有所帮助。我尝试的一种解决方法是创建一个包含大量颠覆外部的单独文件夹,将正确的子文件夹聚集在一起。然后,例如,我可以使用来自顶级多模块工件的一个 Maven 命令构建整个事物。

  2. 发布:发布是在整个代码库上完成的。首先,我制作了一个巨大的依赖关系图,其中我使用了专门为项目编写的自定义工具,因为无法直接使用 Maven 执行此操作。然后我必须在依赖关系树中逐步释放一层工件,从底部开始,从没有任何进一步依赖关系的工件开始,构建它们,如果成功地将父 POM 适应新版本,然后继续下一层. 有时我想把所有的版本控制工作做两次,一次是在 subversion 中,一次是在所有的 POM 中。发布插件似乎也不能自动适应依赖管理。

  3. 哈德逊:在 Hudson,我们为所有父工件提供了 20 个工作。每个工件都有 3 个活动分支。这创造了大约 60 个工作岗位。每次分支更改时,都会导致浏览器中的大量鼠标单击工作。至少依赖作业的自动构建触发正在工作。但是,如果一个模块被分成一个编译作业和一个报告作业,这又会导致问题。通常编译比生成报告要频繁得多,后者不应减慢前者的速度。但是,每当报告作业运行时,它也会触发所有编译作业。如果工件真的被部署,Hudson 似乎不能只触发依赖作业。我还尝试为整个项目制作一个巨大的多模块构建,但增量构建功能无法正常工作。没有它,构建需要的时间太长了。但是需要构建相关的工件,因为您永远无法确定一个工件会导致什么变化。

  4. 聚合报告:我还没有弄清楚如何为每个父 POM 级别的单元测试、测试覆盖率、检查样式和其他生成聚合报告。有些插件甚至不支持聚合选项。对于其他人,我必须为层次结构中的每个级别再次进行构建。Maven 站点报告还可以,但它们似乎是相当静态的,并且在浏览它们时用途有限。也许这里更好的选择是使用 Sonar Source 或其他一些源代码分析工具。此外,将这些报告整合到 Hudson 对我来说似乎并不理想。

从我的角度来看,我希望只有一个大存储库,在那里我可以签出一个目录,从源代码构建所有内容,为发布制作一个标签/版本,不依赖任何外部存储库并在 Hudson 中配置一项工作。但这可能与不同开发团队的需要相去甚远。似乎很难为两者找到一种易于管理的方式。

0 投票
3 回答
15630 浏览

maven - 如何发布具有项目间依赖关系的 Maven 多模块项目?

假设我们有 3 层项目。DB、业务、Web 和聚合 pom。

所有模块都将一起发布和分支,因此聚合器 pom 被配置为将相同的版本分配给所有子模块。我们有以下版本:

执行时release:prepare,所有版本都更新到 0.1,但由于还没有DB-0.1依赖关系,准备失败。

versions:use-releases一种解决方案是为每个模块创建不同的项目,并在使用插件将依赖项更新到0.1的同时将它们一一发布

但我不喜欢这个想法,因为它需要大量的配置和脚本。所以,我更喜欢使用聚合并使用单个命令发布所有模块,但问题是,正如我上面写的,当发布插件尝试构建时,存储库中还Business-0.1没有DB-0.1

有没有办法管理这些项目间的依赖关系?

谢谢。

升级版:

即使安装目标失败。

  1. 数据库构建 - 好的(任何存储库中都没有快照或发布版本)
  2. 业务 - 失败(在存储库中找不到 DB-0.1-SNAPSHOT。但它甚至不应该存在!)

我正在使用 maven 3.0.2 并发布插件 2.1

0 投票
1 回答
413 浏览

eclipse - 无法在eclipse中运行maven项目

我们有现有的 Maven 项目。我已经使用 m2eclipse 插件导入了它。但是我无法运行该项目。Tomcat 看不到资源(目标文件夹下的 WAR 文件)。我错过了什么?顺便说一句,我们有多模块项目(2 个 WAR 文件)。

提前致谢!

0 投票
1 回答
274 浏览

ruby - Is there any 'Equinox (OSGi)' like implementation for using in Ruby?

Is there any 'Equinox (OSGi)' like implementation for using in Ruby?

I would like to use distributed multimodality with easy management in Ruby and I wasn`t able to find anything like E

0 投票
1 回答
1787 浏览

inheritance - 让 Maven 聚合器 pom 将属性注入模块 pom 的可行性(不使用继承)

关于 Maven 的一些可行性问题。特别是,我们是否可以在聚合 pom 中定义属性,然后将它们注入到引用的模块中,从而允许该模块在本地覆盖继承层次结构中定义的默认属性。

如果您对细节感兴趣,我将描述我的设置。不过,在此之前,我只想说,我们已经作为一个团队广泛讨论了我们的项目结构,它非常适合我们的需求。我们目前不是在寻找其他结构的建议,而是专门探索 maven 是否可以满足我们的需求。

所以,我们的设置;我会把它归结为要点。我们有两个源项目,A 和 B。它们中的每一个实际上都是另一个的子模块,分别是 ParentA 和 ParentB。ParentA 和 ParentB 在技术上具有许多子模块,但在此示例中,为了简单起见,我将仅显式引用一个。到目前为止,一切都很好。ParentA 引用 A 作为子模块,A 引用 ParentA 作为其父模块。同样的关系适用于 B 和 ParentB 之间。

现在是乐趣。我们希望 ParentA 和 ParentB 都有一个超级父 pom 来继承共享属性和配置,例如依赖管理和插件等。但是我们不希望这个超级父 pom 负责构建。相反,我们想定义一些有选择地构建各种模块的构建项目。在本例中,我将介绍 BuildAB 和 BuildB。第一个构建 A,然后构建 B,而第二个构建 B。实际上,我们有很多这样的交错模块组和依赖项。最后,只是为了完成图片,我们有一个从 B 到 A 的依赖关系。

让我尝试使用一些 ascii 艺术来绘制它;)

遗产

子模块关系

依赖项

现在,就目前而言,不可能使用 BuildAB 和 BuildB 文件中的属性来定义依赖关系;这些构建文件不是任何继承树的一部分,因此不会获取任何属性。但是我们确实希望在运行 BuildAB 和 BuildB 时以不同的方式控制依赖版本;简单地将依赖项放在超父级中并不能满足我们的要求。

如果您想知道为什么这可能是考虑到一个团队可能正在开发 B 模块并且可能对 A 进行微小的修改。其他开发人员可能正在为项目 A 开发最新和最伟大的项目,由于依赖关系,该项目对 B 产生了影响。多亏了 Mercurial,我们有很好的机制在源代码中处理这个问题。但是我们真的很难用 Maven 来完成这项工作。

理想情况下,每个构建文件首先会依赖从父级继承的子模块。但是当我们需要覆盖这个继承时,我们希望能够在 Build 文件中指定可注入的属性,这就像它们最初在模块中指定的一样。当然,所有这些都没有实际修改受源代码控制的 pom。

我们想要评估的是是否有任何范围可以通过插件或补丁修改 maven 来做到这一点。

我们以前从未编写过插件(坦率地说,关于这方面的教程和在线内容很少,而且对开发人员并不友好 - 除非有人有我错过的好教程 :))但我们愿意尝试一下,如果这似乎是可行的。

所以,基本上,

  • 您之前是否自己处理过类似的要求并使其与现有插件一起使用?
  • 我们缺少一个简单的技巧吗?
  • 你有没有写过类似的插件并且可以推荐一个开始的地方?
  • 你知道为什么这样的插件可能不起作用的任何实际原因吗?
  • 您是否在处理 maven 源代码并知道我们是否能够贡献任何生成的代码......以及如果我们愿意,我们应该从哪里开始寻找。

最后一条评论。我们在 Eclipse 中开发,因此我们还需要构建在没有属性注入的情况下工作。我希望这将通过正常的继承树。

非常感谢大家,我知道这是一个有点棘手的问题。

0 投票
0 回答
627 浏览

maven-2 - 为多模块项目构建聚合器 pom,并带有子模块的配置文件

我有一个多模块项目如下
---模块A(构建战争)
---模块B
---模块C

为了构建多模块项目,我有一个定义模块的聚合器 POM。
<modules>
<module>C</module>
<module>B</module>
<module>A</module>
</modules>

War 文件 A,依赖于模块 B 和模块 C。

当我构建聚合器 pom 时,我想用特定的配置文件构建模块 B。有没有办法告诉聚合器 pom 使用特定配置文件构建模块 B?

0 投票
1 回答
498 浏览

maven - 使用 Maven 将子模块的 jar/类包含到其他子模块的 jar 中

我有一个多模块 Maven 项目,其父/子结构如下:

| 父-> pom pack | -- 子模块AppletUtils -> jar 包 | -- 子模块AppletA -> jar 包 | -- submoduleAppletB -> jar 包 ... | -- submoduleAppletN -> jar包

每个 applet jar 都依赖于 submoduleAppletUtils 类。我正在使用下面给出的 maven-jar-plugin 来包含每个这些 jars pom 文件的清单 Class-Path 条目。在构建每个 jar 时,与 submoduleAppletUtils 相关的 jar/类不包含在任何生成的 jar 中。想知道如何实现它,以便使它们在运行时可用。

-提前致谢。

0 投票
3 回答
268 浏览

java - 设计一个多模块项目

我是这个概念的新手,所以我将其称为“多模块项目”可能是错误的。在我正在制作的软件中,有一个具有不同输入和输出的不同单元。我决定将其拉出并将其作为单独的(Web)服务运行,因为它在此独立模式下具有其他值。

但问题是,以前与该单元混合的应用程序现在也必须独立运行。这意味着它应该有一种新的方式通过调用它的服务端点来与该单元通信,这增加了新的复杂层(将不太简单的数据序列化和反序列化为 XML 和 JSON)。在软件工程中是否有这种常见做法?我可以通过其他方式传输数据吗?

该软件是用 Scala 编写的,它在 JVM 上运行,可能会也可能不会影响这个故事。