"如何有效" classpath是从Java应用程序内部打印出来的吗?
此代码:
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
ClassLoader x = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader)x).getURLs();
for (URL y : urls)
System.out.println(y);
}
输出:
file:/usr/share/java/plexus-classworlds2-2.5.1.jar
我希望在类路径中看到更多项目,包括META-INF和WEB-INF文件夹。
"如何有效"打印classpath?
-----编辑
我使用的解决方案(基于答案):
public static void main(String[] args) {
ClassLoader x = Thread.currentThread().getContextClassLoader();
URL[] urls = ((URLClassLoader)x).getURLs();
for (URL y : urls)
System.out.println(y);
}
答案 0 :(得分:2)
因此,您实际上是在寻找应用程序资源查找/搜索。
Servlet有办法在Servlet容器中获取资源。您可以使用ServletContext
获取资源。
E.g。
ServletContext context = getServletConfig().getServletContext(); //ONLY if you're inside a Servlet.
String[] paths = context.getResourcePaths();
if (paths != null) {
for (String path : paths) {
URL resource = context.getResource(path);
//BLAH BLAH BLAH here
}
}
这样您就可以访问自己的网络应用资源,包括META-INF
和WEB-INF
文件夹中的资源。
对于System资源和Classpath资源,您需要使用ClassLoader;
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
ClassLoader applicationClassLoader = Thread.currentThread().getContextClassLoader();
//Follow the examples you've used above.
对于JARS中的资源,您需要使用URLClassLoader
并打开它的连接并获取JarFile
并遍历其所有条目,如下所示:
JarURLConnection connection = (JarURLConnection) url.openConnection();
JarFile file = connection.getJarFile();
Enumeration<JarEntry> entries = file.entries();
while (entries.hasMoreElements()) {
JarEntry e = entries.nextElement();
if (e.getName().startsWith("com")) {
// ...
}
}
我希望这会有所帮助。