【问题标题】:Hierarchical tag structure with maven releases带有 Maven 版本的分层标签结构
【发布时间】:2012-03-23 19:41:55
【问题描述】:

我们在一个 SVN 存储库中有一堆较小的项目。存储库具有以下结构:

/trunk
   /artifactId1
   /artifactId2
   /groupId
      /artifactId3
      /artifactId4
/branches
  ... see above
/tags

所以它看起来有点像 maven 存储库。

现在我希望 maven 发布插件在标记时创建类似的结构。我将插件配置更改为:

<tagNameFormat>@{project.groupId}/@{project.artifactId}/@{project.version}</tagNameFormat>

maven 发布插件会创建正确的 SVN url:https://repo/tags/groupId/artifactId3/1.0.0

但是存储库中尚不存在路径结构,因此 SVN“标记”操作失败。

我不想每次将新工件添加到需要标签支持的 SVN 存储库时都创建路径结构。有没有办法配置 maven 在标记之前先创建父结构?还是我需要为执行此操作的 maven 创建一个插件?

【问题讨论】:

  • svn中没有创建默认的TTB文件夹结构是什么原因?
  • @khmarbaise 因为当您拥有大量工件和常规版本时,它会造成混乱。
  • 如果它造成混乱,请在标签/存档中移动旧标签,即使它显然不是更好的解决方案(scm 链接到你的 pom 不会跟随你的移动)

标签: svn maven-2 maven-release-plugin maven-scm


【解决方案1】:

因为您发现嵌套标签和分支不是路径 - 没有工具可以开箱即用。

听起来 ArtifactID1-4 是单独的 svn 项目,它们不是一起构建和发布的。也许他们每个人都应该是 svn 中的一个项目,有自己的分支标签和主干文件夹。你会避免你提到的混乱以及嵌套分支和标签的混乱。

【讨论】:

    【解决方案2】:

    我已经遇到过这种问题,但我不会给你一个直接的答案来解决你的问题。确实,您尝试做一些不是“专家方式”的事情......

    据我了解,您尝试标记:

    • 只有一个工件,将其放入 groupId/artifactID/version 中
    • 或所有 repo(例如所有在主干下)。

    标记一个工件

    仅在标记 artifact3 的情况下,您是对的。第一次尝试标记时,您无法执行此操作,因为无法在一个命令中创建完整结构(svn 标记确实是一个副本,并且复制命令不支持允许复制和创建目录的选项,例如“ mkdir -p" 在 Linux 上。

    但是 Maven 约定(默认行为)是 tags/artifactId-version,您可以创建自己的结构和自己的模板来执行发布(通过您的 IDE 或在 svn 命令行中)。然后,根据需要更改 tagNameFormat(并且您似乎正在这样做):

    <project>
      [...]
      <build>
        [...]
        <plugins>
          [...]
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.3.1</version>
            <configuration>
              <tagNameFormat>${groupId}/${artifactId}/@{project.version}</tagNameFormat>
            </configuration>
          </plugin>
          [...]
        </plugins>
        [...]
      </build>
      [...]
    </project>
    

    您也可以修改 tagBase,正如 khmarbaise 所说,混合使用 tagBase 和 tagFormat(以覆盖默认行为)。 我从未尝试过,但它应该可以工作。请注意,版本使用@而不是$(在commit期间或之前不能替换它,但在taggin操作期间使用)。

    显然,您必须为要以这种方式标记的每个工件创建合适的结构。但您只需要做一次。

    标记所有工件

    如果您想一次性标记所有工件,这将更加困难。 我不确定这是你想要的,所以我会很简短,只提供一些线索:

    • 如果您的组件链接在一起,只需设想构建一个多模块项目(并在其上运行 mvn release),所有模块都嵌套在其中(这是正确的方式)
    • 如果不是,您不必将它们标记在一起;D

    如果我误解了你的意图,请不要犹豫,回复我,提供更多信息。

    祝你好运:)

    【讨论】:

      【解决方案3】:

      问题只是因为 tags 文件夹不包含 groupId 和 artifactid 文件夹。您需要使用发布插件的配置设置tagBase。这可以在你的 super-pom 的 pluginManagement 部分中完成。

      【讨论】:

        猜你喜欢
        • 2010-09-29
        • 1970-01-01
        • 2021-05-20
        • 1970-01-01
        • 1970-01-01
        • 2018-12-02
        • 2020-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多