问题标签 [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.
maven - 打包命令行 Java 项目的最佳方式
我正在创建一个没有 GUI 的 java 命令行项目。该项目使用任意数量的开源项目:Spring、Logback、Commons CLI 等。当我开始考虑打包时,我想象它会以 zip 文件的形式出现,可以分解到 jar 中,并带有一个 lib 子目录, 和依赖库中的 jars。
我一直在玩 Maven Assembly,但它仍然没有像上面那样出现,而且我还没有找到任何生成上述结构的示例。有可能这样做吗?此外,具有多模块结构增加了另一层我无法解决的复杂性,因为组装模块无法找到核心模块作为依赖项。这是我的第一个 Maven 项目,所以我还在学习 Maven 的工作原理。我已经阅读了 Sonatype 这本书,但错过了一些东西,因为即使使用“最佳实践”部分也无法解决缺失的依赖关系。我见过的示例通常涉及合并到一个超级可执行 jar 中,其中一些使用 Shade 项目,一些不使用。我的问题是,做一个包含 Spring 等第三方库的 uber jar 是个好主意吗?还是我应该坚持我原来的 zip/lib 子目录计划?
maven-2 - 使用 maven 构建 webapp 及其独立插件
我有一个 webapp,我称之为core,它可以添加插件(不是 maven 插件),但它应该作为一个独立的 webapp 运行和构建。我们有一个核心依赖的插件库,并且所有开发到核心的插件也依赖于它。
像这样:
我的目录结构很简单:
我的第一个问题是:我可以构建核心或任何插件并构建依赖库吗?我阅读了有关modules的信息,但如您所见,该 lib 有 2 个父级。我真正想要的是构建核心并构建库,或者如果我构建了任何插件,我还想独立构建库。还要注意,核心不依赖于任何插件。
第二个问题是:如何构建核心也构建插件,虽然核心不依赖于它们,并且插件不应该是核心的模块。他们可以,这不是必需的,但我宁愿不这样做,因为我想尽可能保持独立。
截至目前,当我构建插件时,它会将自身复制到核心内的 /plugin 目录,并且我在核心 pom 中有一个分发配置文件,用于将现有插件从该目录复制到 webapp 的战争中。因此,当我构建没有配置文件的核心时,它不会复制其插件,但是当我运行分发配置文件时,是的。这可行,但很乏味,因为我必须构建库、构建插件和构建核心。
我想知道是否有任何 pom 结构可以解决我的第一个问题的双重依赖,以及是否有任何方法可以处理第二个问题并通过核心构建插件,即使它们不依赖。并且,如果可能的话,如果我可以在配置文件中而不是单独的 pom.xml 中处理第二个问题。此配置文件使用maven-assembly-plugin创建一个包含所有内容的tar.gz。如果可能的话,我也想保持这一点。
java - 在多模块 Maven 项目中优化 Spring Bean?
出于某种原因,我在这方面画了一个空白。我有一个多模块 Spring/Maven 项目。在 module1 中,我定义了一个名为“info”的单例 bean,它在 module1 中工作得很好。
然而,这个项目中的 module2(依赖于 module1)对“info”bean 的属性值进行了改进。Module2 的 Spring 配置已经包含 Module1 的配置。我应该使用什么 Spring 配置来设置此后续模块中定义的“信息”bean 的属性?
java - 在多模块 Maven 项目的构建阶段之前运行单元测试
我有一个多模块 Maven 项目。在每个模块中都有单元测试。当我在每个模块之前运行全新安装测试时,如果一个模块中的所有测试都成功,则它会成功构建。如果一个测试失败,该模块中的所有其他测试都成功运行(或者一些成功运行,另一些失败)。放置第一个失败单元测试的模块构建失败。跳过其他模块。我想要这样的事情:首先在所有模块中运行所有单元测试,然后如果没有失败的测试构建所有模块,或者如果一个或模式模块中有一个或多个失败的测试跳过所有模块的构建。你能帮我吗?
maven - 多模块项目中的Maven复制资源
我的需求非常基本,但我找不到任何明确的答案:我只需要能够在多模块项目中分发资源。
让我们以 LICENSE 文件为例,我在此假设所有模块都相同。我不想手动将它复制到每个模块中,因为文件可能会随着时间而改变。我也不想静态链接到项目文件夹之外的资源(即使使用相对路径),因为模块化结构也可能发生变化。
是否有任何插件可用于可靠地保证每个模块都具有所需的文件?通过利用父项目的 POM 或直接由模块化层次结构中的超级项目执行这样的副本同样可以接受。
maven - Hudson:构建多模块 Maven 项目失败,然后立即再次成功
我有一个多模块项目,其中顶级项目既作为单个模块的父级,又作为声明模块的项目。只有这个顶级项目在 Hudson 中配置(包括自动 SVN 结帐)。简化布局如下:
此外,model_foo
还依赖于kernel
.
现在,Hudson 会自动发现kernel
和model_foo
子项目,它通常会设法构建一切都很好。
但是,每次我进行重大更改时,例如在其中创建一个新类kernel
并在其中使用它model_foo
,我都会得到一个失败的构建model_foo
,然后是一个成功的构建。邮件通知标题为
Build failed in Hudson: MyProject » MyProject Model Foo #1545
Hudson build is back to normal : MyProject » MyProject Model Foo #1546
这是为什么?我怀疑这可能与MyProject
pom.xml 既是多模块项目又是其模块的父级这一事实有关,但在更改之前,我想知道它是否真的有帮助。
我使用哈德逊 2.1.0。
更新
这是web
模块构建失败的日志(等于model_foo
上图中的)。MyProject 根项目的构建具有相同的内部版本号,并且成功。
我去掉了实际的编译器错误,这与缺少新引入的类完全相同。
maven - 我应该如何从多个来源共享 Maven 依赖管理?
我有一个 Maven 项目多模块项目。一些模块为其他模块生成的库创建自定义打包。正在使用的包装有自己的一套版本化依赖项,我需要很好地使用它们。
例如:我的父 POM 可能有一个条目,例如commons-codec:commons-codec 1.4
,我的“core-lib”POM 将其作为依赖项包含(无显式版本),并且我想确保我的打包模块捆绑在正确的版本中。但是,我使用的特定类型的自定义打包也需要例如log4j:log4j 1.2.15
,并且我想确保当我的打包模块运行时,它还捆绑了正确的 log4j 版本。
这是皱纹:我正在为“制作{自定义包装}的项目”工作的示例POM使用自定义包装团队提供的父级。如果我使用他们的父母,我会丢失commons-codec
. 如果我使用我的父母,我会丢失log4j
.
现在,通常如果我问“我如何使 A 和 B 依赖于相同的版本”,您会回答“使 A 和 B 具有相同的父级,并dependencyManagement
在父级中包含一个部分”。我的问题是,我需要 A、B 和 C 依赖同一个版本,但我对 C 没有任何控制权。
我认为这就是 Maven“mixins”要解决的问题,但当然它们还不存在。与此同时,我一直在做的是选择一个父母,然后dependencyManagement
从另一个 POM 复制并粘贴该部分,并附上一条评论说“确保你保持最新”。显然,这是一个丑陋,丑陋的黑客,但我还没有找到另一种与双方保持同步的方法。
eclipse - Eclipse + Maven + Git + 多模块项目 = 不开心
我们有一个使用 Eclipse 和 Maven 的多模块项目。过去我可以让它工作的唯一方法是对项目使用平面布局,其中父模块与其他模块是对等的。这适用于 m2eclipse 和 Subversion。
现在我们想迁移到 Git 和 GitHub。我想将整个项目以及所有模块公开为 GitHub 上的单个项目。问题是 EGit,Eclipse/Git 插件,想要一次管理一个项目,而不是项目组,所以如果你有一个平面布局,你就不能这样做。
正确的答案是使用标准的 Maven 分层布局并将父模块和所有模块作为一个单元进行管理。但是 Eclipse 不喜欢这样,再多的摆弄也不会让 Eclipse 接受嵌套项目。m2Eclipse 不支持层次结构:https ://issues.sonatype.org/browse/MNGECLIPSE-2291
所以你会怎么做?是否从命令行执行 Git 并放弃在 Eclipse 中查看哪些文件已更改的功能?还是放弃 Eclipse?
java - 如何将多模块 maven 项目组装成一个 WAR?
类似的问题在这里。
我想从 3 个不同的 Maven 模块中部署一个生成的 WAR。战争模块是绝对不冲突的:
第一个具有 Java 类和一些 WEB-INF/工件的
第二个只是 API - 接口 - 必须已经存在于容器中或由此产生的战争的一部分(这就是我想要的)
第三个带有实现类、WEB-INF/artifacts(spring 基础设施、web.xml 等)
第一个取决于接口和实现。第三个取决于接口。
我对可能的选择一团糟。
我为此使用叠加层吗?
或者我是否使用程序集插件来集成第二个类中的类?
我使用Cargo 插件吗?
或者,如果我从不同的模块指定 webResources,它是由 maven-war-plugin 完成的吗?因为这个家伙和我做的几乎一样,但只有 2 个战争模块,而且他不使用汇编插件,也不使用 Overlays....
请告诉我,这是如何正确完成的?
java - Eclipse 和 SVN 中的 Maven Multimodul 项目
我有一个现有的项目,MainProject。我想将其转换为多模块项目。在 Eclipse 中,我创建了一个父模块,它只是一个 pom 模块和另一个模块 Modul_1。
然后我将我的 MainProject 移动到父文件目录中。(实际上我不想移动到父文件夹中。不幸的是,为了让 Main_project 找到父模块,我必须这样做)
工作正常..它看起来像:
Modul_1 仅在 jenkins 中需要。这意味着程序员应该只关心 MainProject。
我应该如何在 SVN 中签入项目?使用相同的文件结构还是我可以在 SVN 中独立签入?