【问题标题】:Best practices for embedding SVN version number in Java jar manifest?在 Java jar 清单中嵌入 SVN 版本号的最佳实践?
【发布时间】:2012-02-12 19:43:12
【问题描述】:

我看到像How to get revision number from subversion using maven? 这样的问题,但是对于清单中要使用的实际字段、版本号和存储库 URL(即显示它在主干上还是在主干上),是否有任何标准(事实上或其他)。分店)?我已经看到使用的 Implementation-Version,有和没有前导“r”(用于修订),我也看到了 Implementation-Build: 的使用。

edit 我删除了不应该存在的 maven 标签。我的问题是关于 jar 内容,而不是工具本身。

【问题讨论】:

  • 没有我知道的标准。每个公司/开发人员似乎对如何管理修订号都有自己的看法,更不用说如何记录和描述该修订了 :-)
  • 如果您想以编程方式读取修订号,您可能需要考虑使用清单以外的文件(或至少除了清单之外)。从 JVM 内部读取 MANIFEST.MF 实际上非常痛苦,如果类加载器层次结构发生变化,则从一个环境到另一个环境可能会不一致。
  • 哈哈,很高兴这是一个热门问题。现在我只需要自己动手做。

标签: svn jar manifest manifest.mf


【解决方案1】:

不幸的是,jar 清单本身没有任何版本编号标准。

但是,实际上,还有另一种标准方法可以自动更新修订号。您可以使用svn:keywords 在每次提交后获取文件中的当前修订号。 $Revision$ 属性用于修订替换,$HeadURL$ 用于存储库 URL 替换。您只需将以下字符串放入文件中并将此文件置于版本控制之下:

$Revision$ $HeadURL$

如果您使用 maven 动态创建清单,我建议将以下内容放入 version.properties 文件中:

revision=$Revision$
repourl=$HeadURL$

然后将语句包含在pom.xml 中(maven 应该启用属性插件):

<plugins>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-1</version>
    <executions>
      <execution>
        <phase>initialize</phase>
        <goals>
          <goal>read-project-properties</goal>
        </goals>
        <configuration>
          <files>
            <file>version.properties</file>
          </files>
        </configuration>
      </execution>
    </executions>
  </plugin>

然后您就可以将修订号和 repo url 放入清单中:

<manifest>
  <attribute name="Revision" value="${revision}" />
  <attribute name="Repository URL" value="${repourl}" />
</manifest>

还请注意,您需要使用颠覆属性 explicitly enable svn:keywords 才能在您的文件中将 $Revision$$HeadURL$ 替换为实际值。如果您决定使用version.properties,则需要运行以下命令:

svn propset svn:keywords Revision version.properties
svn propset svn:keywords HeadURL version.properties

【讨论】:

  • 谢谢,一项更正是 propset 中应该是“Revision\ HeadURL”而不是“Id”。然而,那个 $Revision 只包括 version.properties 的版本(见:svnbook.red-bean.com/en/1.7/… "where's globalrev")但是,$HeadURL$ 不会经常改变(除非你 svn 切换一个子目录)。所以我应该考虑使用 HeadURL 而不是完全忽略关键字。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多