Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh
Một nhu cầu mà chúng ta thường gặp là làm sao để biết được ứng dụng mà chúng ta đang chạy có version là bao nhiêu, giúp chúng ta có thể biết được những feature mà ứng dụng đang hỗ trợ cho tới version này. Trong Java thì tuỳ theo ứng dụng mà các bạn đang sử dụng là gì, Web application hay Desktop application thì cách lấy thông tin version của ứng dụng sẽ khác nhau. Đối với các ứng dụng Java Desktop hoặc Java Console, các bạn có thể lưu trữ và lấy thông tin version của ứng dụng từ tập tin META-INF/MANIFEST.MF bên trong tập tin jar của ứng dụng.
Xem thêm các việc làm Java lương cao trên TopDev
Ví dụ như mình có một ứng dụng Java Console khi chạy sẽ in ra dòng chữ “Hello from Huong Dan Java”:
Mình đã sử dụng Maven Shade Plugin để build ứng dụng này, và khi build ứng dụng, mình đã thêm một số thông tin liên quan đến ứng dụng vào tập tin META-INF/MANIFEST.MF bên trong tập tin jar như sau:
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache Maven 3.6.3 Built-By: khanh Build-Jdk: 15.0.1 Main-Class: com.huongdanjava.mavenshadeplugin.Application Implementation-Title: maven-shade-plugin-example Implementation-Vendor-Id: com.huongdanjava Implementation-Version: 0.0.1-SNAPSHOT Specification-Title: maven-shade-plugin-example Specification-Version: 0.0.1-SNAPSHOT
Trong những thông tin này thì thông tin header “Implementation-Version” chứa thông tin về version của ứng dụng.
Để lấy thông tin này và hiển thị ra cho ứng dụng, các bạn có thể sử dụng đoạn code sau:
public String getVersion() throws IOException { URLClassLoader cl = (URLClassLoader) Application.class.getClassLoader(); URL url = cl.findResource("META-INF/MANIFEST.MF"); Manifest manifest = new Manifest(url.openStream()); Attributes attr = manifest.getMainAttributes(); return attr.getValue("Implementation-Version"); }
với class Application là một class bất kỳ của ứng dụng.
Ví dụ của mình như sau:
package com.huongdanjava.mavenshadeplugin; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.util.jar.Attributes; import java.util.jar.Manifest; import org.apache.commons.lang3.StringUtils; public class Application { public static void main(String[] args) throws IOException { String version = getVersion(); System.out.println(StringUtils .capitalize("hello from Huong Dan Java. Application version is " + version)); } private static String getVersion() throws IOException { URLClassLoader cl = (URLClassLoader) Application.class.getClassLoader(); URL url = cl.findResource("META-INF/MANIFEST.MF"); Manifest manifest = new Manifest(url.openStream()); Attributes attr = manifest.getMainAttributes(); return attr.getValue("Implementation-Version"); } }
thì khi build lại ứng dụng rồi chạy nó, các bạn sẽ thấy kết quả như sau: