2009-12-18 77 views
3

MavenSCM插件似乎不提供“提交”目标。 scm:checkin执行提交和推送。我需要避免推动。如何在安装时将Maven配置为提交到Mercurial存储库:安装

我只是想在install:install期间做hg commit。我没有使用release插件,现在不需要它。我只是在多模块环境中本地工作,并且希望确保我的源代码库与我的Maven本地安装的每个模块的快照保持一致。换句话说,每次我安装一个模块的新快照时,我都希望提交给hg的相关代码使每个快照与hg修订(或快照之间发生多个提交时的修订版本范围)直接相关。

回答

2

以下将绑定scm:checkininstall阶段。只要存储库是file://方案(至少对于Mercurial,根据the code),在scm:checkin期间不执行

  1. 定义在下面的步骤中使用性质:

    <properties> 
        <message>maven install:install auto-checkin.</message> 
        <repository.local>file:///path/to/local/repository</repository.local> 
        <repository.type>hg</repository.type> 
    </properties> 
    

    <message>可以是任何你选择。由于提交应该包含有意义的消息以进行哪些更改,因此完全修复并不理想。但是,我确实认为应该在自动提交中包含一个标准消息来识别它。在每次安装之前,请修改步骤1中的<message>属性。

  2. 这只是一个基于Maven的项目的标准scm节点。由于这只涉及本地存储库,因此这些URL都是相同的。

    <scm> 
        <connection>scm:${repository.type}:${repository.local}</connection> 
        <developerConnection>scm:${repository.type}:${repository.local}</developerConnection> 
        <url>scm:${repository.type}:${repository.local}</url> 
    </scm> 
    
  3. 这是插件,在install阶段执行提交运行。它会简单地执行基于定义适当的SCM签入在步骤2中

    <build> 
        <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-scm-plugin</artifactId> 
         <version>1.2</version> 
         <executions> 
         <execution> 
          <phase>install</phase> 
          <goals> 
          <goal>checkin</goal> 
          </goals> 
         </execution> 
         </executions> 
        </plugin> 
        </plugins> 
    </build> 
    

一个问题是,我收到以下。

弃用:绑定聚合mojos 到生命周期阶段的POM是 认为是危险的。此功能已被弃用 。请相应地调整您的 POM文件。

我正在研究如何解决它,但现在,它的工作原理和我一起去。

+0

提交http://jira.codehaus.org/browse/MNG-4504查看“DEPRECATED”消息。 – nicerobot 2009-12-26 00:19:38

0

如何将checkin上的connectionUrl设置为本地盒子上的丢弃存储库?因此,您的结帐将来自“中央”回购,但您的“签入”将仅用于工作存储库(您需要的提交)以及(显然)不可避免的推送将归档到file:/// tmp/whocares。

或者在scm插件中可能有一行代码注释掉以避免推送。

+0

是的,我认为,但我想在实施一个解决方法之前问。谢谢 – nicerobot 2009-12-18 21:44:13

0

Maven的scm插件似乎没有提供“提交”的目标。 scm:checkin执行提交和推送。我需要避免推动。

那么SCM插件也许不是你要找的:)

我在做的过程中install:install的汞提交简单的兴趣。我没有使用release插件,现在不需要它。

说实话,这是一个很奇怪的用法。虽然我理解你所描述的内容,但对我来说,将SNAPSHOT与修订版本号“同步”并没有什么意义。即使您不在两个SNAPSHOT构建之间提交代码,我也不明白这是如何成为问题的。换句话说,我不明白强制提交的附加价值是什么。在我看来,使用release插件不会解决任何问题。总之,我认为scm插件不会让你达到目标(至少不是没有黑客攻击)。我不知道在Ant中是否存在对mercurial的支持,但是,如果存在,也许你应该朝这个方向看(而使用antrun插件)。

+0

这个想法是,您可以随时轻松地知道进入特定快照的更改。例如,在快照几天或几周后发现错误时,您可以返回到存储库以更轻松地发现可能存在的问题。此外,并且与“约定优于配置”一致,如果将代码和注释记录在变更所涉及的内容中,记录特定快照中的更改将变得非常简单。 – nicerobot 2009-12-18 21:48:17

+0

“特别快照”,没有这样的事情。 SNAPSHOT是HEAD的最新版本。如果你想跟踪的东西,使用固定版本。 – 2009-12-19 01:27:20

+0

让我说得有所不同。每当快照创建并可用时,就认为它已准备好供其他项目使用(至少在我的工作流程中)(尽管因为它是快照,显然还在开发中)。确切了解自上次创建快照后发生了哪些更改仍然很有用。但是,另外,如果我选择使用uniqueVersion = true,则可以同时使用多个“快照”,并使用时间戳和序列进行版本控制,其他项目可以专门引用而不仅仅是SNAPSHOT。这两种情况下,这种技术都很有用。 – nicerobot 2009-12-21 03:52:39