获得有效的类路径

时间:2015-01-29 10:42:28

标签: java

"如何有效" 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);
}

1 个答案:

答案 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-INFWEB-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")) {
        // ...
    }
}

我希望这会有所帮助。