Svn 具有maven版本的分层标记结构

Svn 具有maven版本的分层标记结构,svn,maven-2,maven-release-plugin,maven-scm,Svn,Maven 2,Maven Release Plugin,Maven Scm,我们在一个SVN存储库中有许多较小的项目。存储库具有以下结构: /trunk /artifactId1 /artifactId2 /groupId /artifactId3 /artifactId4 /branches ... see above /tags 所以它看起来有点像maven存储库 现在我希望maven发布插件在标记时创建类似的结构。我将插件配置更改为: <tagNameFormat>@{project.groupId}/@

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

/trunk
   /artifactId1
   /artifactId2
   /groupId
      /artifactId3
      /artifactId4
/branches
  ... see above
/tags
所以它看起来有点像maven存储库

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

<tagNameFormat>@{project.groupId}/@{project.artifactId}/@{project.version}</tagNameFormat>
{project.groupId}/{project.artifactId}/{project.version}
maven发布插件将创建正确的SVN url:

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


我不想每次向需要标记支持的SVN repo添加新工件时都创建路径结构。有没有一种方法可以配置maven在标记之前先创建父结构?或者我需要为maven创建一个插件来实现这一点吗?

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

我已经面临这种问题,但我不会给你一个直接的答案来解决你的问题。事实上,你试图做一些不以“专业方式”的事情

据我所知,您尝试标记:

  • 只有一个工件,将其放入groupId/artifactID/version
  • 或所有回购协议(例如,全部在主干下)
标记一个工件

仅在标记工件3的情况下,您是对的。第一次尝试标记时,您无法这样做,因为不能在一条命令中创建完整的结构(svn标记实际上是一个副本,而copy命令不支持允许复制和创建目录的选项,如linux上的“mkdir-p”)

但是,不管Maven约定(默认行为)是tags/artifactId版本,您都可以在之前创建自己的结构和模板来执行发布(通过IDE或在svn命令行中)。然后,根据您的意愿更改tagNameFormat(以及您似乎要做的事):


[...]
[...]
[...]
org.apache.maven.plugins
maven发布插件
2.3.1
${groupId}/${artifactId}/@{project.version}
[...]
[...]
[...]
正如khmarbaise所说,您还可以使用tagBase和tagFormat的混合来修改tagBase(以覆盖默认行为)。 我从未尝试过,但它应该可以工作。请注意,版本使用@而不是$(在提交期间或之前不得替换,但在标记操作期间稍后使用)

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

标记所有工件

如果您想一次性标记所有工件,这将非常困难。 我不确定这是否是您想要的,因此我将简要介绍,只提供一些线索:

  • 如果您的组件链接在一起,只需设想构建一个多模块项目(并在其上运行mvn发行版),所有模块都嵌套在其中(这是正确的方法)
  • 如果它们不是,您就不必将它们标记在一起;D
如果我误解了你的意图,请毫不犹豫地回复我,提供更多信息


祝你好运:)

因为你发现嵌套的标记和分支不是路径-没有工具能够在开箱即用的情况下很好地使用它们


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

为什么不在svn中创建默认TTB文件夹结构?@khmarbaise,因为当您有大量工件和定期发布时,它会造成混乱。如果它造成混乱,请移动标记/归档中的旧标记,即使这显然不是更好的解决方案(scm链接到您的pom不会跟随您的移动)
<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>