发布:在标记之前准备好SCM url

时间:2012-05-02 16:21:14

标签: maven maven-release-plugin

我使用SVN来版本化源文件和maven release插件来创建和标记版本。我的项目是一个多模块项目。

短篇小说

发布:准备目标会导致主干和标签在我的SCM中被标记。

长篇故事

我的项目是一个多模块项目:

 bar
    module1
    module2
    ...
    pom.xml

SCM标记在我的项目父POM bar / pom.xml中配置如下:

<scm>
  <connection>scm:svn:http://svn.mycompany.local/svn/foo/projects/bar/trunk</connection>
  <url>http://svn.mycompany.local/svn/foo/projects/bar/trunk</url>
</scm>

当我跑步时:

mvn release:prepare -DskipTests=true -DautoVersionSubmodules=true -DdevelopmentVersion=1.1 -DdryRun=true

pom.xml.tag中的SCM标记已修改,但不是例外:

<scm>
    <connection>scm:svn:http://svn.mycompany.local/svn/foo/projects/bar/tags/bar-1.0/trunk</connection>
    <url>http://svn.mycompany.local/svn/foo/projects/bar/tags/bar-1.0/trunk</url>
</scm>

如果我执行发布:

 mvn release:clean release:prepare release:perform -DautoVersionSubmodules=true -DdevelopmentVersion=1.1

目录主干AND标记标记在tags文件夹中。我在存储库中得到了这个结构:

bar
   /trunk/
        [...]
   /tags
        /bar-1.0
            /trunk
            /tags

然后执行目标失败:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.0:perform (default-cli) on project bar: Error executing Maven. 
Working directory "C:\projects\foo\bar\target\checkout\bar" does not exist! -> [Help 1]

事实上,我在目标\ checkout目录中已经有了这个:

tags\
trunk\

我有几个其他项目可以使用相同类型的配置没有问题。

我检查了什么:   - 我的subversion结构遵循conventionnal branches / trunk / tags,所以不应该在这里提到tagBase   - 有效的POM显示正确的SCM配置(在标记之前)   - 当然检查SCM url是否正确并指向pom.xml的位置

所以我真的不知道在哪里看。有没有人有同样的问题或有想法?我错过了什么?

感谢。

1 个答案:

答案 0 :(得分:3)

首先,我建议使用比2.0更新的版本在bar-pom中配置发布插件(因为当前2.2.2是一个)并将信息autoVersinSubmodules也放入配置中(这使生活更轻松)。给定的选项-DdevelopmentVersion = 1.1没有意义,因为开发版必须以“-SNAPSHOT”为后缀,否则它是一个版本而不是developmentVersion。此外,添加developerConnection并在“trunk”的末尾添加“/”,如下所示../trunk/ maven-release-plugin与您正在使用的Maven版本相关。 Maven的超级pom定义了一组插件及其适当的版本。