Jar在类路径中

时间:2015-02-02 15:53:20

标签: java jar classpath

是否有一种以编程方式获取类路径中所有jar的完整列表?

我需要这个,因为我们在两个平台之间存在行为差异 一个由我们管理,但另一个不是,我需要知道是否存在 或者不是同一个罐子。

2 个答案:

答案 0 :(得分:4)

取决于classpath的确切含义,实际上不同类路径

  1. 引导类路径

    System.getProperty("sun.boot.class.path")
    
  2. 扩展类路径

    System.getProperty("java.ext.dirs")
    
  3. 用户定义的类路径

    System.getProperty("java.class.path")
    
  4. 适用于标准Java SE应用程序。对于模块化和Java SE,它更复杂。

答案 1 :(得分:3)

  

是否有一种以编程方式获取所有jar的完整列表的方法   classpath?

这是print out the current project classpath的一种方式:

ClassLoader cl = ClassLoader.getSystemClassLoader();
java.net.URL[] urls = ((java.net.URLClassLoader)cl).getURLs();
for (java.net.URL url: urls) {
    System.out.println(url.getFile());
}

如果您需要determine which jar a class is loaded from

Class klass = ClassInTrouble.class;
CodeSource source = klass.getProtectionDomain().getCodeSource();
System.out.println(source == null ? klass : source.getLocation());

如果有用,你也可以get a list of all classes loaded in the JVM