So I finally figured it out and thought I'd share incase anyone else was banging their head against the proverbial brick wall as much as I was. I never could get the methods in the Package
class to return anything other than null
. See revised code below for how I managed to pull it off.
package com.example.package1;
import java.util.*;
import java.util.jar.*;
import java.net.*;
class myClass {
public static void main(String[] args) {
try {
new myClass();
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
System.out.println("Done");
try{Thread.sleep(40000);}catch(Exception ee){}
}
}
public myClass() throws Exception {
String clz = getClass().getSimpleName() + ".class";
String pth = getClass().getResource(clz).toString();
String mnf = pth.substring(0, pth.lastIndexOf("!") + 1) + "/META-INF/MANIFEST.MF";
String pkg = getClass().getPackage().getName().replaceAll("\.","/");
URL url = new URL(mnf);
Manifest manifest = new Manifest(url.openStream());
Attributes attr = manifest.getAttributes(pkg);
String value = attr.getValue("Specification-Title") + " - " +
attr.getValue("Implementation-Title") + " " +
attr.getValue("Specification-Version") + " build # " +
attr.getValue("Implementation-Version");
System.out.println(value);
}
}
Output:
MyPackage - MP v1.1 build # 2015-11-05-C
Done
Which is a lot of code to extract four pieces of Metadata.
So if you like a few less lines here's what I used instead:
public myClass() throws Exception {
Attributes attr = new Manifest(new URL(getClass().getResource(getClass().getSimpleName() + ".class").toString().substring(0, getClass().getResource(getClass().getSimpleName() + ".class").toString().lastIndexOf("!") + 1) + "/META-INF/MANIFEST.MF").openStream()).getAttributes(getClass().getPackage().getName().replaceAll("\.","/"));
String value = attr.getValue("Specification-Title") + " - " + attr.getValue("Implementation-Title") + " " + attr.getValue("Specification-Version") + " build # " + attr.getValue("Implementation-Version");
System.out.println(value);
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…