• 0

[JAVA]Accessing build date/time at runtime


Question

My app is a straightforward Java SE 6 program, built in Eclipse and distributed as a single executable jar (I don't need or use any advanced build tools such as ant).

I want to automate the process of getting accurate version information into the "About" message, because right now I have to remember to open the main class and update a version String every time I rebuild the app.

Ideally I'd like to automatically insert the date/time when the code (or the jar) was built into something I can access at runtime, but any workable approach would do.

Does anyone have any suggestions?

Thanks

James

8 answers to this question

Recommended Posts

  • 0

Use an Ant task to generate a "Version" class at build time that contains the version value as a public static field. You can use that field to get the version information.

<property name="Version" value="1.1.0" />

<target name="build" depends="init">
	...

	<echo file="my/project/Version.java">lic class Version {
	public static final String VERSION = "${Version}";
}
	</echo>
</target>

You could use an Ant <script> task to fill the Version variable if you want something a bit more dynamic.

  • 0

Hi skyfox - thanks for the reply. What I'm looking for is,as you say, "a bit more dynamic", ie something that will automatically make the build date/time available at runtime without the need to edit anything manually for each build. Ps - I've never worked with ant, so maybe the learning curve would be disporportionate to the problem being solved? What do you think?

  • 0

Hi Mike. No, I don't have a script. The app just has a couple of hundred classes, so it's easiest to just let Eclipse keep all the class files up to date (Project > Build Automatically)and then all I have to do is right-click the jar description to get a new jar exported.

  • 0

OK guys, I found a hint that lead me to this

		try {
			File jarFile = new File
			(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI());
			System.out.println("jar: " + new Date(jarFile.lastModified()));
		} catch (URISyntaxException e1) {
		}

which gives me the last modified date for the jar that the class was loaded from. That's pretty good for what I need...

... unless anyone has a better idea?

Edited by JamesCherrill
  • 0

I found this package's API, which suggest it returns the build date:

http://www.clapper.org/software/java/util/.../BuildInfo.html

More info on it here: http://www.clapper.org/software/java/util/

I took a peek at the source code to see how it got the build date but couldn't find it, it just seemed to store the current date in a property :/

  • 0

^^

I had that same idea James, however I suspect the date time stuff on the jar maybe o/s dependednt (so if you download of the net or switch to unix you may lose your timestamp)...

unless you can read the modified date time off a class inside the jar.... but then again not all class files are always rebuilt when exporting to a jar... or are they?

  • 0

The app is tied in to other Windows services, so I don't need OS independence. With Eclipse automatic build, .java files are re-compiled only when necessary, so the .class file for any given class may be quite old. I haven't tried uploading/downloading it via the net, so maybe that's a problem - I know that just copying it via a shared folder on a server preserves the last modded date.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Google Pixel 10 series tipped to debut on August 13 by Sagar Naresh Bhavsar A few days ago, Google announced a pre-launch event for Pixel Superfans in the U.K., slated for this month. The event "Pixel Penthouse" will showcase Google's upcoming devices, including the Pixel 10 series phones. A total of 25 lucky fans, whom Google refers to as Superfans, will be selected to attend a 90-minute event in London on June 27. It was expected that fans would get a glimpse at the Pixel 10 series phones and the Pixel Watch 4. Now, a reliable leaker has added fuel to the fire, suggesting that the Pixel 10 series will launch in a couple of months. According to MysteryLupin on X/Twitter, the Pixel 10 could launch on August 13. Interestingly, this also suggests that Google is sticking with the same schedule as the Pixel 9 series launch. However, it is unclear if the leaker has revealed the launch date or the date of availability. This year, Google isn't expected to introduce drastic changes to the Pixel 10 series, something that is expected out of the Apple iPhone 17 series this year. However, the Pixel 10 series will get an upgraded TSMC-made Tensor G5 chipset and MediaTek modems instead of Qualcomm's. The Pixel 10 lineup will include four models, similar to last year: Pixel 10, Pixel 10 Pro, Pixel 10 Pro XL, and the Pixel 10 Pro Fold. Leaks have hinted at a similar design to the Pixel 9 series, but they are expected to get big camera upgrades. The Google Pixel 10 series could get a "Video Generative ML" feature that would allow users to edit their videos using AI tools. The phones could also get "Sketch to Image" and "Magic Mirror" features. Tensor G5 is also reportedly a capable chipset that will support 4K @60fps HDR video, as opposed to the 4K @30fps HDR video on the current Tensor G4 chipset. Additionally, the base Pixel 10 model is expected to get a telephoto lens. For now, all rumors must be taken with a pinch of salt. Let us know your thoughts on whether or not you'll be upgrading to the Pixel 10 this year.
    • Hi All, I wanted to know how I connect dual monitor (2 x 24 inch monitor) via HDMI or DP to my PC with no Graphics card Below are the PC Specs. I don't have any GFX card and currently utilising the integrated graphics. Processor : AMD Ryzen 7 7700 upto 5.30GHz 8C 16T OEM Motherboard : MSI B650 S Pro Wifi DDR5  
    • Definitely not the same telemetry collected for W10 as there is for W11, and W10 ran great compared to the dumpster fire that is W11 even today 4 years later. Windows 8 was not remarkable and arguably the most forgettable release to date.
    • Bazzite isn't a fork of SteamOS, it's a fork of Fedora Atomic that runs an interface similar to SteamOS. I'm also curious to hear what improvements it brings over actually running SteamOS on the Deck?
  • Recent Achievements

    • First Post
      ClarkB earned a badge
      First Post
    • Week One Done
      Epaminombas earned a badge
      Week One Done
    • Week One Done
      Prestige Podiatry Care earned a badge
      Week One Done
    • Week One Done
      rollconults earned a badge
      Week One Done
    • Week One Done
      lilred1938 earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      137
    2. 2
      Xenon
      129
    3. 3
      ATLien_0
      124
    4. 4
      +Edouard
      102
    5. 5
      snowy owl
      97
  • Tell a friend

    Love Neowin? Tell a friend!