当前位置: 首页 > 面试题库 >

在Maven中,模块是否受存储库的updatePolicy影响?

华景焕
2023-03-14
问题内容

让我给出一个方案。您有一个多module项目和一个用于部署项目的持续集成服务器。这将部署到本地settings.xml具有的updatePolicy的存储库always。现在,假设您mvn compile在CI部署项目后立即运行。

您最终将针对远程服务器的modules还是本地模块进行编译?

换句话说,updatePolicy存储库的对module标签有没有影响?


问题答案:

modules标签是一个聚合。它与的处理方式不同dependencies。请注意,您在dependency和中指定的值module是不同的。声明a时dependency,请指定maven坐标。同时module,您指定相对目录。

您最终将针对远程服务器的模块还是本地模块进行编译?

如果mvn compile在聚合器模块中运行(在子模块中不能!)
并且子模块的依赖关系是同级的依赖关系,则最终将始终针对本地模块进行编译。当您mvn compile在聚合器模块中时,在编译子模块时进行依赖项查找会很特殊。它看起来与同级模块的目标文件夹
。我找不到与此有关的文档,但是您可以尝试一下。

想象一下,您有这些聚合器pom

...
<modules>
  <module>child-a</module>
  <module>child-b</module>
</modules>
....

child-b pom声明依赖于child-a。(确保您有一个真实的输出类)

接下来,当您mvn compile使用聚合器pom时,即使您以前没有mvn installchild-a ,child-
b也将能够编译。这意味着child-a甚至不在您的本地存储库中。这是可能的,因为maven将查找child-
a的类的目标文件夹。要确认这一点,您可以尝试运行mvn compile clean(是的,在编译后清除)。

再次注意,此行为仅在从聚合器pom运行时才适用。如果您当前的工作目录是child-b(取决于child-a),则它在尝试查找child-a时将遵守updatePolicy。



 类似资料:
  • 我们使用Git、Jenkins和Artifactory作为CI/CD管道。我们有一个很大的代码库,每次完整的构建都需要大量的时间来处理。例如,我们有一个包含100+模块的聚合pom项目。父级文件如下所示: 因为更改可能不会发生在每个模块上,所以我们希望通过只构建自上次成功构建以来受影响的模块来加快构建过程。这可以通过Maven来完成。 示例: 如果开发人员知道哪些模块被更改了,这是很容易的。如果没

  • 我有一个多模块的项目,即。 在一个开发周期中,我向Module1添加了一个类。module2中的类依赖于它。 我的本地中没有这些工件。运行此: 然而,这至少从两个方面提出了一个问题: 我必须经历较慢的安装阶段,而不是较快的编译阶段 我有同一个项目的两个版本,在这些版本中有冲突的修改。我不能用它们各自的修改运行相同的Java类,只能运行当前安装的修改,考虑到它们都是相同的快照版本 这两种方法都有解决

  • 这很可能通过Nexus配置得到解决。 我们使用maven进行hadoop开发。Nexus被配置为所有存储库的镜像,存储库被添加到Nexus公共组中。(参见Nexus中有没有更好的配置存储库的方法?) 我发现hadoop-core工件版本1.0.4显示来自spring-roo-repositoryhttp://spring-roo-repository.springsource.org/releas

  • 我有一个多模块项目,其中两个子模块中的一个依赖于另一个。这个问题意味着应该处理这些依赖关系。 在我的机器上的本地级别上一切都很好(在Eclipse内部和命令行上)。但是,当我更新修改第二个模块所需代码的模块并提交到我的github存储库时,第二个模块将无法构建Travis CI。我将问题追溯到这样一个事实,即它正在从存储库下载其依赖项,而不是使用它刚刚编译的存储库。 和父pom.xml的摘录: 完

  • 问题内容: 我需要检查文件/(自定义)模块js是否存在于某些路径下。我试过像 但是当路径中没有per.js时,它将引发错误。我本来想检查文件是否存在,但如果不进行检查, 我不想添加后缀。如何检查节点是否存在模块以及是否存在要加载的模块? 问题答案: Require是一个同步操作,因此您可以将其包装在try / catch中。

  • 问题内容: 嘿嘿 我有一个与这个结构的Maven项目: 父母: 项目清单 API模块 模块2 … 模块5 测试 分销/组装 因此,首先运行父模块,然后运行构建api的模块,然后运行依赖api的模块,然后运行包含要测试的工具的测试模块,最后运行组装/发行版,其中打包一些归档中的模块。由于某些问题,我无法真正改变方法,并且到目前为止效果很好。 使用詹金斯,我将其发布到了Maven仓库中,但是我只想发布