我们使用 Maven 进行构建,使用 Mercurial 进行变更集。虽然我们的软件已经处理了一个主要版本,但我们真的很想知道 Mercurial 变更集用于构建运行我们软件的任何服务器。
有没有人知道在 Maven 中获取工作目录在 Mercurial 中的变更集并将其放入属性文件或其他内容的方法,这样当系统管理员针对当前正在运行的版本进行“健全性检查”时,我们就可以在应用程序的某个位置显示它?
我们使用 Maven 进行构建,使用 Mercurial 进行变更集。虽然我们的软件已经处理了一个主要版本,但我们真的很想知道 Mercurial 变更集用于构建运行我们软件的任何服务器。
有没有人知道在 Maven 中获取工作目录在 Mercurial 中的变更集并将其放入属性文件或其他内容的方法,这样当系统管理员针对当前正在运行的版本进行“健全性检查”时,我们就可以在应用程序的某个位置显示它?
您可以制作一个更新挂钩,将变更集 ID 输出到未版本化的 .properties 文件中:
[hooks]
update = echo changesetid=$HG_PARENT1 > version.properties
这种方法的优点是您可以在需要时轻松自定义此值,并且构建保持独立于版本控制系统(或缺少版本控制系统)。
如果您想在生成它的 Maven 构建中放置一些东西,您是否查看过Buildnumber Maven 插件(hgchangeset目标)或Maven Mercurial Build Number 插件?
将此合并到您的pom.xml
:
<project>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>hgchangeset</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
然后将.properties
属性src/main/resources
设置为${changeSet}
. 例如:
revision = ${changeSet}
modificationTime = ${changeSetDate}
如果您可以拦截命令输出(进入环境变量,fe)hg id -i
将是简单的方法。可以构造更复杂的 idhg log --template "..." tip
您可以使用 Maven 的 antrun 插件来运行一个<exec>
或<java>
生成包含该信息的属性文件的任务。不过,这不是很优雅。
如果您需要比 org.codehaus.mojo.buildnumber-maven-plugin 更多的属性,也可以使用https://github.com/volodya-lombrozo/hg-revision-plugin 。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>com.github.volodya-lombrozo</groupId>
<artifactId>hg-revision-plugin</artifactId>
<version>0.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>
scan
</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
然后你可以使用第二个属性:
hg.author=${hg.author}
hg.branch=${hg.branch}
hg.revision=${hg.rev}
hg.node=${hg.node}
hg.tags=${hg.tags}
hg.desc=${hg.desc}
hg.date=${hg.date}