【问题标题】:deploy on nexus artifacts with Snapshot policy but without SNAPSHOT string in version在具有快照策略但版本中没有 SNAPSHOT 字符串的关系工件上部署
【发布时间】:2012-11-27 17:59:27
【问题描述】:

显然,如果工件在版本中没有 -SNAPSHOT,我的 Nexus 会拒绝我向他抛出的每个部署。

数据:

  • 失败工件的名称:entando-core-engine-experiment-bundles_with_bootstrap.jar 其中 experiment-bundles_with_bootstrap 是版本在 pom.xml 的版本元素中
  • 在我的 Nexus 上托管存储库策略:快照、允许重新部署等(快照的经典配置)
  • 部署者:Jenkins 1.481
  • 同样的 Jenkins 工作,但是 entando-core-engine-SNAPSHOT.jar ---> 成功

我需要这个命名约定,因为我正在构建我们内部运行的几个实验之一,这与生成正确 entando-core-engine-SNAPSHOT.jar 的规范开发分支相反

有什么建议吗? 我完全迷路了。

【问题讨论】:

  • 你用什么来构建这些工件。命名约定似乎省略了版本字符串。此外,默认情况下不允许将工件重新部署到版本中(但即使这是一个坏主意,也可以启用。
  • 正如我所说,托管存储库的策略是快照(不是发布)。我正在编辑有关命名约定的更多详细信息的问题。
  • 您可以尝试手动上传工件,看看是否可行?还有..您使用什么工具进行部署?马文?还有什么?
  • 我只是想感谢您发布这个问题而不是投票,因为它在第 11 个小时内救了我。我收到关于 SNAPSHOT 不允许我的版本的错误,但没有任何东西表明我最后需要 SNAPSHOT。我将快照更改为发布,现在我可以给它们我想要的版本,而最后没有明显的 SNAPSHOT 附件。真的,如果我有一个像 1.34.2cod9rf (最后一个 git commit hash)这样的版本,真的需要说明它是一个快照吗? :-D

标签: maven deployment jenkins nexus snapshot


【解决方案1】:

问题是通常您的 Nexus 配置为不允许重新部署版本。从 Maven 的角度来看,发布是一个工件,它的版本不是 -SNAPSHOT。与此相反,SNAPSHOT 旨在多次部署到 nexus 中。
听起来你没有使用 Maven 的发布插件,也没有使用 Jenkins 的发布插件。

【讨论】:

  • 这似乎有点暗示...我会尽快规避 Nexus 默认为快照存储库的强制 -SNAPSHOT 的事实:我会将存储库策略更改为 Release 并且我我也会尝试设置“允许重新部署 --> true”
  • 我不会这样做。因为发布的想法是它们只会被部署一次。
  • 是的,我同意。但鉴于更新后的问题提供了更多详细信息,那么我如何才能拥有此实验所需的命名约定 + 我公司 Nexus 中的工件?
  • 将此标记为答案,因为最后我使用了一个带有发布策略和允许重新部署的 Nexus 存储库。这是一种解决方法。我只是希望 Maven 和 Nexus 会接受自定义字符串,而不仅仅是 SNAPSHOT 用于构建 - 事实上 - 开发构建,因此是快照。
【解决方案2】:

Nexus 是一个存储库管理器,它使用不同的存储库格式,主要格式是 Maven 存储库格式。更改服务器上工件的名称是不可能的,因为它违反了格式。它们必须位于由 groupId、artifactId 和 version 建立的目录结构中,并使用 artifactId-version-classifier.packaging 作为文件名。

如果您需要在服务器上使用不同的文件名,则必须查看不同的存储库格式(坏主意)。如果您需要客户端上的文件名,只需从正确的名称下载并重命名..

【讨论】:

  • 对不起,我读了三次,仍然无法理解它如何适合我的问题所描述的场景......
  • 我不确定你在问什么。我是说你不能在服务器上强制命名约定。 maven 存储库格式规定了文件名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多