6

我们使用 Maven 进行构建,使用 Mercurial 进行变更集。虽然我们的软件已经处理了一个主要版本,但我们真的很想知道 Mercurial 变更集用于构建运行我们软件的任何服务器。

有没有人知道在 Maven 中获取工作目录在 Mercurial 中的变更集并将其放入属性文件或其他内容的方法,这样当系统管理员针对当前正在运行的版本进行“健全性检查”时,我们就可以在应用程序的某个位置显示它?

4

5 回答 5

7

您可以制作一个更新挂钩,将变更集 ID 输出到未版本化的 .properties 文件中:

[hooks]
update = echo changesetid=$HG_PARENT1 > version.properties

这种方法的优点是您可以在需要时轻松自定义此值,并且构建保持独立于版本控制系统(或缺少版本控制系统)。

如果您想在生成它的 Maven 构建中放置一些东西,您是否查看过Buildnumber Maven 插件hgchangeset目标)或Maven Mercurial Build Number 插件

于 2011-10-26T10:02:26.343 回答
6

将此合并到您的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}
于 2011-10-28T09:26:15.417 回答
0

如果您可以拦截命令输出(进入环境变量,fe)hg id -i将是简单的方法。可以构造更复杂的 idhg log --template "..." tip

于 2011-10-26T00:52:54.387 回答
0

您可以使用 Maven 的 antrun 插件来运行一个<exec><java>生成包含该信息的属性文件的任务。不过,这不是很优雅。

于 2011-10-26T08:01:01.440 回答
0

如果您需要比 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}
于 2020-03-13T11:17:22.540 回答