Maven的SCM插件似乎没有提供“提交”目标。 scm:checkin
执行提交和推送。我需要避免推动。
我只是想在hg commit
期间做install:install
。我没有使用release
插件,也不需要它。我只是在多模块环境中本地工作,并希望确保我的源存储库与我的Maven本地安装的每个模块的快照一致。换句话说,每次我安装模块的新快照时,我都希望提交给hg的相关代码使每个快照直接与hg版本(或快照之间发生多次提交时的修订范围)相关联。
答案 0 :(得分:2)
以下内容将scm:checkin
绑定到install
阶段。只要存储库是file://
方案(至少对于Mercurial,根据the code),scm:checkin
期间不会执行推送。
定义以下步骤中使用的属性:
<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>
属性。
这只是基于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>
这是在执行提交的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>
一个问题是我收到以下内容。
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插件)。