pde*_*eva 1 java instrumentation bytecode classloader javaagents
我有一个javaagent jar,我把它放在bootclasspath上
Boot-Class-Path: myagent.jar
Run Code Online (Sandbox Code Playgroud)
在MANIFEST.MF文件中.
我需要找到jar所在文件系统的目录.
然而,这里描述的方法似乎并不适合我:
new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
Run Code Online (Sandbox Code Playgroud)
在这种情况下,ProtectionDomain.getCodeSource()返回null.我想这种情况正在发生,因为jar已被放在引导类路径中.因此,我也无法通过MyClass.getClassLoader()来获取资源位置.
我使用的是Java 6.
任何人都可以告诉如何获得罐子的位置?
您可以使用System类加载器在引导类路径上查找类.例如,这个
System.out.println(ClassLoader.getSystemClassLoader().getResource("java/lang/String.class"));
Run Code Online (Sandbox Code Playgroud)
会打印出类似的东西,
jar:file:/C:/Program%20Files/Java/jdk1.6.0_22/jre/lib/rt.jar!/java/lang/String.class
Run Code Online (Sandbox Code Playgroud)
要在磁盘上找到MyClass.class的位置,请执行
String urlString = ClassLoader.getSystemClassLoader().getResource("com/my/package/MyClass.class").toString();
urlString = urlString.substring(urlString.indexOf("file:"), urlString.indexOf('!'));
URL url = new URL(urlString);
File file = new File(url.toURI());
System.out.println(file);
System.out.println(file.exists());
Run Code Online (Sandbox Code Playgroud)