如何在我们的Java jar中插入版本号,用户可以访问?

Gra*_*min 7 java versioning jar

我们有一个库,每隔几周就会发布一个不同的版本号.问题是,为了将版本号存储在我们的jar中,我们有一个version.txt文件,它只包含版本号,然后包含在构建中.这似乎是错误的方法,但我无法想出更好的解决方案.什么是在我们的jar中存储版本号的更好方法,这样如果用户给我打电话,我可以很容易地找到他们正在使用的产品版本?

dav*_*ink 6

首先 - 确保您的程序或工具可以显示版本号.但是它来自哪里?我们将它包含在构建中.

只要确保它们运行时在某个地方可见!如果没有任何可运行的东西,添加一个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文件,这是另一小堆代码,但很容易.


dun*_*nni 5

您是指用户手动访问,还是从Java应用程序访问?您可以创建一个MANIFEST.MF,其中包含版本号.我认为每个主要的buildtool都有一些工具可以在构建过程中自动完成.