1

我使用maven 发布插件 2.3.2maven 3.0.4,我在准备和分支阶段遇到了问题。

我有一个http:/svn.pyhost.com/projects/App1. App1包含 3 个目录:

App1/trunk
App1/branches
App1/tags

树干包含

App1/trunk/ApplicationParent
App1/trunk/ApplicationChild

所以,我想创建一个只有ApplicationParentand的新标签ApplicationChild。所以,我在我的pom.xml地方创建了配置,我放了这样的东西:

<scm>   
<connection>http:/svn.pyhost.com/projects/App1/trunk</connection> 
<developerConnection>http:/svn.pyhost.com/projects/App1/trunk</developerConnection>
<url>http:/svn.pyhost.com/projects/App1/trunk</url>
</scm> 


<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<tagBase>http:/svn.pyhost.com/projects/App1/tags</tagBase>
<branchBase>http:/svn.pyhost.com/projects/App1/branches</branchBase>
</configuration>
</plugin>
</plugins>
</build>

接下来,我执行mvn release:prepare并 maven 创建了包含ApplicationParent-1.0所有 fromApp1 (trunk, branches and tags)的新标签,我不知道为什么,因为scm我只设置了

http:/svn.pyhost.com/projects/App1/trunk所以我希望从主干字典中标记所有内容,但是 Maven 创建ApplicationParent-1.0并放置了trunk, branches and tags目录。为什么 ?

所以,我将我的 scm 更改为http:/svn.pyhost.com/projects/App1/trunk/ApplicationParentmvn release:prepare再次执行,现在很好,在 ApplicationParent-1.1 中,我全部来自主干目录。

但是,如果我执行mvn release:branchusing http:/svn.pyhost.com/projects/App1/trunk/ApplicationParent,我只能有新的分支ApplicationParent,但我需要为所有主干词典创建一个分支,所以我需要更改scmhttp://svn.pyhost.com/projects/App1/trunk/,如果我想创建分支很好。但是如果我需要创建新标签release:perform,我会遇到上面描述的问题。

为什么我不能同时使用http:/svn.pyhost.com/projects/App1/trunk路径release:performrelease:branch

4

1 回答 1

1

我感觉您的 SCM 的结构不是 Maven 发布插件所满意的。下面的文章解释了插件理解的一些结构

虽然支持您描述的格式,但您并没有在 pom.xml 文件中反映这一点和/或您尝试将单个 pom.xml 文件用于本质上是两个不同的项目(ApplicationParent 与 ApplicationChild)。

我建议将您的 SCM 重组为:

App1/ApplicationParent
    /trunk
    /tags
    /branches
    /releases
App1/ApplicationChild
    /trunk
    /tags
    /branches
    /releases

然后您在 pom.xml 中的 ApplicationParent 的开发人员连接可以是:

<developerConnection>http:/svn.pyhost.com/projects/App1/ApplicationParent/trunk</developerConnection>

和标签/分支库:

<tagBase>http:/svn.pyhost.com/projects/App1/ApplicationParent/tags</tagBase>
<branchBase>http:/svn.pyhost.com/projects/App1/ApplicationParent/branches</branchBase>

对于子项目:

<developerConnection>http:/svn.pyhost.com/projects/App1/ApplicationChild/trunk</developerConnection>

和标签/分支库:

<tagBase>http:/svn.pyhost.com/projects/App1/ApplicationChild/tags</tagBase>
<branchBase>http:/svn.pyhost.com/projects/App1/ApplicationChild/branches</branchBase>

然而,我个人的喜好是只从发布分支(例如 /releases/xyz)而不是 /trunk 中执行发布插件。因此,您在 SCM 中进行分支,然后签出新的发布分支并在发布分支上执行发布:准备和发布:执行魔术。

不要忘记使用:“mvn release:prepare -DdryRun=true”,这样你就可以在实际发布之前看到它要做什么。一旦一切正常,您可以将“release:clean release:prepare release:perform”作为单个 maven 命令执行。

于 2012-11-23T01:26:56.843 回答