zib*_*ibi 14 java reflection jar
我想知道是否有可能在运行时检索该类来自的jar的版本号?
我知道有可能找到该类来自的jar:
MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();
Run Code Online (Sandbox Code Playgroud)
但是版本怎么样?
(假设它不在文件名:))
1ac*_*ac0 18
import javax.mail.internet.InternetAddress;
/**
Display package name and version information for javax.mail.internet.
*/
public final class ReadVersion {
public static void main(String... aArgs){
ReadVersion readVersion = new ReadVersion();
readVersion.readVersionInfoInManifest();
}
public void readVersionInfoInManifest(){
InternetAddress object = new InternetAddress();
Package objPackage = object.getClass().getPackage();
//examine the package object
String name = objPackage.getSpecificationTitle();
String version = objPackage.getSpecificationVersion();
//some jars may use 'Implementation Version' entries in the manifest instead
System.out.println("Package name: " + name);
System.out.println("Package version: " + version);
}
}
Run Code Online (Sandbox Code Playgroud)
She*_*nar 17
试试这个,它可能会有所帮助:
String s = new String();
System.out.println(s.getClass().getPackage().getSpecificationVersion());
System.out.println(s.getClass().getPackage().getImplementationVersion());
Run Code Online (Sandbox Code Playgroud)
输出:
1.7
1.7.0_25
Run Code Online (Sandbox Code Playgroud)
小智 5
小心使用 getPackage().getImplementationVersion/getSpecificationVersion()
getSpecificationVersion 从 Manifest 返回 specVersion。Manifest 是 jar 的一个属性,在 sun.misc.URLClassPath 中用作
public Manifest getManifest() throws IOException {
SharedSecrets.javaUtilJarAccess().ensureInitialization(JarLoader.this.jar);
return JarLoader.this.jar.getManifest();
}
Run Code Online (Sandbox Code Playgroud)
因此,如果有人使用您的库作为 fat jar 的依赖项,它会返回 fat jar 的 Manifest 版本。
| 归档时间: |
|
| 查看次数: |
20885 次 |
| 最近记录: |