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

时间:2012-03-06 10:29:36

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

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

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

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

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

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

maven发布插件将创建正确的SVN网址:https://repo/tags/groupId/artifactId3/1.0.0

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

每次将新工件添加到需要标记支持的SVN仓库时,我都不想创建路径结构。有没有办法在标记之前先配置maven来创建父结构?或者我需要为maven创建一个插件吗?

3 个答案:

答案 0 :(得分:1)

当您发现嵌套标签和分支不是路径时 - 没有工具可以很好地开箱即用。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

根据我的理解,您尝试标记:

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

标记一个工件

仅在标记artifact3的情况下,你是对的。第一次尝试标记时,您无法执行此操作,因为无法在一个命令中创建完整结构(svn标记确实是副本,而复制命令不支持允许复制AND创建目录的选项,如“ 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>

你也可以像khmarbaise所说的那样修改tagBase,混合使用tagBase和tagFormat(以覆盖默认行为)。 我从来没有尝试过,但它应该工作。请注意,版本使用@而不是$(在提交期间或之前不得替换它,但稍后在taggin操作期间使用)。

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

标记所有工件

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

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

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

祝你好运:)