如何在我们的Java 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); 

我喜欢在每个版本中自动化,所以我不会忘记它。 我使用.properties而不是文本文件…但你可以在Version.txt中做同样的事情。

(实际上,目前,我们只包括构建时间。但这个想法是一样的。)

我是这样做的 – 我有一个Version.properties文件,包含:

 buildHost = @HOSTNAME@ buildTime = @BUILDTIME@ buildUser = @USERNAME@ 

作为ANT脚本的一部分,我们做到:

                    

注意 – 以上是一个特定的平台,但你明白了。

你如何阅读.properties文件,这是另一小堆代码,但很容易。

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

  1. 考虑给自己写一个读取txt文件的小类。 (更好的是,切换到大卫建议的属性文件。)
  2. 给它一个主要方法,在控制台上打印该版本。
  3. 创建一个shell脚本或批处理文件,将.jar放在类路径上并调用您的类。
  4. 然后,在构建过程中,让构建系统将当前构建号/版本/时间戳插入该文件中。 对于ant,请参阅Davids示例,对于Maven,我推荐使用Maven Build Number插件 。
  5. 当您需要查看.jar​​文件的版本时,请运行您的脚本。

我和Reupke在这一次。

根据需要,将数字存储在属性文件中,或者在嵌入式数据库中以加密的纯文本forms存储txt文件。只要您拥有它,无论您如何存储它都无关紧要。

然后,我会用一个main方法编写类,该方法读取值,并将其打印出来并很好地显示在屏幕上……这样,如果用户想知道他们的版本号,那么就可以简单地运行命令并获得此版本。