在maven war项目中,我使用jetty-maven-plugin作为开发容器。
我过滤了一些资源文件,特别是我们将它命名为“bddconf.xml”。
此文件由maven过滤并放入target / classes目录中。
使用此代码段在此文件后搜索旧的自制bdd fwk:
Properties properties = new Properties();
InputStream inputstream = properties.getClass().getResourceAsStream("/bddconf.xml");
当我运行此代码段时,在我的webapp(在jetty中)中,inputStream为null。
使用此代码段,使用相同的方法:
import com.google.common.io.Resources;
String file = Resources.getResource("bddconf.xml").getFile();
File file2 = new File(file);
logger.info("Does bdd file exists : [" + file2.exists() + "] file : [" + file2.toString() + "]");
// Does bdd file exists : [true] file : [..path..\target\classes\bbdconf.xml]
它有效,那么这两种方法有什么区别?
答案 0 :(得分:1)
可能是Properties类和guava Resources类具有不同的ClassLoaders(具有不同的权限),因为Class.getResource()和Resources.getResource()为您执行相同的工作。你可以看看番石榴的来源:
public static URL getResource(String resourceName) {
URL url = Resources.class.getClassLoader().getResource(resourceName);
checkArgument(url != null, "resource %s not found.", resourceName);
return url;
}
Class.getResource:
name = resolveName(name);
ClassLoader cl = getClassLoader0();
if (cl==null) {
// A system class.
return ClassLoader.getSystemResource(name);
}
return cl.getResource(name);