Jak obiecałem już jakiś czas temu, pokażę w jaki sposób można pobrać numer wersji, który umieściłem w pliku MANIFEST.MF pod atrybutem Implementation-Version. Wcześniej jednak, chciałbym zwrócić Waszą uwagę na listę wszystkich dostępnych atrybutów oraz specyfikację klasy Package, z której będę korzystać.

W czasie lektury zwróciliście zapewne uwagę na zbieżność nazw niektórych atrybutów z nazwami metod klasy Package. Zbieżność ta w żadnym razie nie jest przypadkowa. I tak oto, do wyciągnięcia wartości atrybutu Implementation-Version posłuży nam metoda Package#getImplementationVersion().

Poniższy kod pokazuje, jak może wyglądać metoda zwracająca numer wersji naszej implementacji:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * This method is used for retriveing Implementation-Version value as
 * {@link String} from MANIFEST.MF from Jar file that is containing
 * {@code clazz}.
 *
 * @param clazz
 * @return {@link String} representing Implementation-Version value
 */
public static String getImplementationVersion(Class clazz) throws IllegalArgumentException {
	if (clazz == null) {
		throw new IllegalArgumentException("Class must be not-null");
	}

	Package pkg = clazz.getPackage();
	if (pkg != null) {
		return pkg.getImplementationVersion();
	} else {
		log.warn("There is no package for class " + clazz);
	}

	return null;
}

Należy zawsze pamiętać, aby pobierać wartości atrybutów pliku Manifestu za pośrednictwem klasy znajdującej się w tym samym pliku Jar co plik Manifest z którego chcemy pobierać te wartości!

Voila!