Gra*_*min 7 java versioning jar
我们有一个库,每隔几周就会发布一个不同的版本号.问题是,为了将版本号存储在我们的jar中,我们有一个version.txt文件,它只包含版本号,然后包含在构建中.这似乎是错误的方法,但我无法想出更好的解决方案.什么是在我们的jar中存储版本号的更好方法,这样如果用户给我打电话,我可以很容易地找到他们正在使用的产品版本?
首先 - 确保您的程序或工具可以显示版本号.但是它来自哪里?我们将它包含在构建中.
只要确保它们运行时在某个地方可见!如果没有任何可运行的东西,添加一个Main,并使其成为Main-Class,只打印版本.然后你可以说,请键入java -jar YourLibrary.jar,它只运行main并打印您的版本.
如果资源(例如Version.txt)位于klazz旁边,那么这是从jar内部读取jar资源的代码的开头:
ClassLoader loader = klazz.getClassLoader();
InputStream in = loader.getResourceAsStream (name);
Run Code Online (Sandbox Code Playgroud)
我喜欢在每个版本中自动化,所以我不会忘记它.我使用.properties而不是文本文件...但你可以在Version.txt中做同样的事情.
(实际上,目前,我们只包括构建时间.但这个想法是一样的.)
我是这样做的 - 我有一个Version.properties文件,包含:
buildHost = @HOSTNAME@
buildTime = @BUILDTIME@
buildUser = @USERNAME@
Run Code Online (Sandbox Code Playgroud)
作为ANT脚本的一部分,我们做到:
<tstamp>
<format property="BUILDTIME" pattern="yyyy.MM.dd.HH:mm:ss z" locale="en,UK" />
</tstamp>
<exec executable="hostname" outputproperty="HOSTNAME">
<!-- note, this is unixey, of course -->
<arg value="-s" />
</exec>
<property environment="env"/>
<property name="USERNAME" value="${env.USER}"/>
<property name="build.info" value="path/to/Version.properties" />
<copy file="${build.info}" tofile="${obj.dir}/${build.info}" overwrite="true">
<filterchain>
<replacetokens>
<token key="BUILDTIME" value="${BUILDTIME}"/>
<token key="HOSTNAME" value="${HOSTNAME}"/>
<token key="USERNAME" value="${USER}"/>
</replacetokens>
</filterchain>
</copy>
Run Code Online (Sandbox Code Playgroud)
注意 - 以上是一个特定的平台,但你明白了.
你如何阅读.properties文件,这是另一小堆代码,但很容易.