【问题标题】:Deploying a maven sub-module to a repository for other projects to use (without parent)将 maven 子模块部署到存储库以供其他项目使用(没有父级)
【发布时间】:2012-11-08 13:36:35
【问题描述】:

问题是,在我们公司,我们有一个包含多个子模块的项目,但是其中一个子模块只是 API 声明的集合,是供其他(第三部分)项目使用的。我想将其保留为子模块,因为它更易于维护和构建(依赖和属性继承)。该项目中的其他子模块也依赖于它。

我的问题是,是否存在执行部署阶段的良好做法或好方法,该阶段将仅将此子模块上传到不同的存储库(也可以复制),而不依赖于父 pom .

我已经尝试过的: 我已经检查了 deploy:deploy-file,但问题在于 SNAPSHOT 构建。我们希望能够发布 SNAPSHOTS 和发布版本,并且快照具有与发布版本不同的存储库,但部署文件目标只能有一个 url 参数。我不想为快照部署使用不同的配置文件。如果版本是 SNAPSHOT,我尝试使用 maven build-helper 及其 regex-property 来更改存储库 url,但由于插件和 regex 限制而无法这样做。

最后一个选项是我可以为此制作一个插件,但我想知道是否有更优雅的方式来解决这个问题,即“maven way”。

【问题讨论】:

  • 只是为了确保:您想运行mvn deploy,但实际上只是将您的“客户端”jar 部署到存储库?
  • 是的,我们有 2 个独立的存储库,一个是内部的,一个是“公共的”,只有客户端模块应该进入公共的。
  • 如果特定子模块需要完全独立的发布策略(版本增量、scm 标记、不同的分发存储库等),最好的“maven 方式”IMO 是将其分离并使其成为一个独立的模块。
  • 之所以不想完全分离它是因为version、tagging、scm、build配置和parent一样,只是生成的jar要单独部署到另一个nexus仓库,供第三者使用。这个 jar 是第 3 方“插件”在编译时需要的唯一依赖项。

标签: java jakarta-ee maven


【解决方案1】:

您可以单独部署此模块,但仅适用于 SNAPSHOT 的发布,这是没有意义的。模块的部署可以通过:

mvn -pl TheModuleYouWouldLikeToDeploy deploy

可能您需要添加选项 -am(也可以生成依赖项),例如:

mvn -am -pl TheModuleYouWouldLikeToDeploy deploy

除此之外,如果您使用的是多模块构建,那么您的方法听起来是错误的,为什么不通过 mvn deploy 部署整个构建呢?让通过像 Jenkins 这样的 CI 工具来完成这项工作可能会更好。

【讨论】:

  • 我认为 -pl -am 无济于事,因为正常部署也会部署子模块的 pom 已定义父级。因此,如果创建一个对所述子模块具有依赖性的新项目,则构建将失败,因为 maven 将无法找到父模块(不需要)
猜你喜欢
  • 2017-10-11
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 2014-03-28
相关资源
最近更新 更多