Maven的SCM插件似乎没有提供“提交”目标。scm:checkin
执行提交和推送。我需要避免推动。
我只是对做一个hg commit
during感兴趣install:install
。我没有使用该release
插件,也不需要它。我只是在多模块环境中本地工作,并希望确保我的源存储库与每个模块的本地安装的 Maven 快照保持一致。换句话说,每次我安装一个模块的新快照时,我都希望提交给 hg 的相关代码使每个快照直接与 hg 修订版(或在快照之间发生多次提交时的修订版范围)相关。
以下将绑定scm:checkin
到install
阶段。只要存储库是一个file://
方案(至少对于 Mercurial,根据代码),在.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>
可以是你选择的任何东西。完全修复并不理想,因为提交应该包含关于所做更改的有意义的消息。但是,我确实相信自动提交中应该包含一条标准消息来识别它。只需<message>
在每次安装之前修改步骤 1. 中的属性。
这只是基于 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 checkin。
<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>
一个问题是我收到以下内容。
已弃用:将聚合器 mojo 绑定到 POM 中的生命周期阶段被认为是危险的。此功能已被弃用。请相应地调整您的 POM 文件。
我正在研究如何解决它,但现在它可以工作,我正在接受它。
将 on 设置connectionUrl
为checkin
本地机器上的一次性存储库怎么样?因此,您的结帐将来自“中央”存储库,但您的“签入”将仅转到工作存储库(您想要的提交),并且(显然)不可避免的推送将转到 file:///tmp/whocares。
或者,在 scm 插件中可能有一行代码可以注释掉以避免这种推送。
Maven 的 scm 插件似乎没有提供“提交”目标。
scm:checkin
执行提交和推送。我需要避免推动。
那么 scm 插件可能不是你要找的:)
我只是对在
install:install
. 我没有使用该release
插件,也不需要它。
老实说,这是一个非常奇怪的用法。虽然我理解您所描述的内容,但将 SNAPSHOT 与修订号“同步”对我来说并没有什么意义。即使您不在两个 SNAPSHOT 构建之间提交代码,我也不明白这怎么会是一个问题。换句话说,我看不出强制提交的附加价值是什么。在我看来,使用发布插件不会解决任何问题。
总而言之,我认为 scm 插件不会让你实现你的目标(至少在没有黑客攻击的情况下不会)。我不知道 Ant 中是否有 mercurial 支持,但如果有,也许你应该转向这个方向(并使用 antrun 插件)。