我们在一个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创建一个插件吗?
答案 0 :(得分:1)
当您发现嵌套标签和分支不是路径时 - 没有工具可以很好地开箱即用。
听起来ArtifactID1-4是单独的svn项目,它们不是一起构建和发布的。也许它们应该是svn中的一个项目,它们有自己的分支标签和主干文件夹。你可以避免你提到的混乱以及乱七八糟的嵌套分支和混乱。标签
答案 1 :(得分:0)
问题只是因为tags文件夹不包含groupId和artifactid文件夹。您需要使用发布插件的配置设置tagBase。这可以在你的super-pom中的pluginManagement部分完成。
答案 2 :(得分:0)
我已经面临这样的问题,但我不会给你一个直接的答案来解决你的问题。事实上,你试图做一些不是“maven方式”的事情......
根据我的理解,您尝试标记:
标记一个工件
仅在标记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操作期间使用)。
显然,您必须为每个要以此方式标记的工件创建合适的结构。但你只需要做一次。
标记所有工件
如果您想一次标记所有工件,这将更加困难。 我不确定这是你想要的,所以我会简短,只给出一些线索:
如果我误解了你的意图,请不要犹豫回复我,提供更多信息。
祝你好运:)