如何在安装时配置Maven以提交到Mercurial存储库:install

时间:2009-12-18 17:10:06

标签: maven-2 mercurial maven-plugin maven-scm

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

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

3 个答案:

答案 0 :(得分:2)

以下内容将scm:checkin绑定到install阶段。只要存储库是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阶段运行的插件。它只是根据步骤2中的定义执行适当的scm签入。

    <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>
    
  4. 一个问题是我收到以下内容。

      

    DEPRECATED:绑定聚合器mojos   到POM的生命周期阶段是   被认为危险。这个功能有   已被弃用。请调整你的   相应的POM文件。

    我正在研究如何解决它,但是现在它起作用了,我会继续使用它。

答案 1 :(得分:0)

如何将connectionUrl上的checkin设置为本地方框上的丢弃存储库?因此,您的结账将来自“中央”仓库,但您的“签入”只会进入工作存储库(您想要的提交),并且(显然)不可避免的推送将转到file:/// tmp / whocares。

或者,scm插件中可能只有一行代码注释掉以避免这种推动。

答案 2 :(得分:0)

  

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

那么scm插件可能不是你想要的:)

  

我只对在install:install期间进行hg提交感兴趣。我没有使用release插件,也不需要它。

老实说,这是一个非常奇怪的用法。虽然我理解你所描述的内容,但对于我来说,将SNAPSHOT与版本号“同步”并没有多大意义。即使你没有在两个SNAPSHOT版本之间提交代码,我也不明白这是怎么回事。换句话说,我没有看到强制提交的附加值是什么。在我看来,使用发布插件无法解决任何问题。

总而言之,我认为scm插件不会让你实现目标(至少在没有黑客攻击的情况下)。我不知道Ant中是否有mercurial支持但是,如果有,也许你应该朝这个方向看(并使用antrun插件)。