Получить записи classpath для выполнения веб-приложения - PullRequest
4 голосов
/ 11 марта 2011

Мне нужно прочитать CLASSPATH записей для текущего веб-приложения. В CLASSPATH у меня много файлов с таким же именем. Я хотел бы проверить, на какой позиции они появляются в classpath. Например: path:\file.txt;path2:\file.txt....

Спасибо за вашу помощь.

С уважением Себастьян

Ответы [ 4 ]

6 голосов
/ 11 марта 2011

Попробуйте:

// get the compact classpath value
String path = System.getProperty("java.class.path");

// the character : on windows and ; on unixes
String separator = System.getProperty("path.separator");

// the character \ on windows and / on unixes
String fileSep = System.getProperty("file.separator");

Вам нужны separator и fileSep, потому что : и \ сильно зависят от системы.

4 голосов
/ 10 сентября 2013

Используя ответ Себастьяна выше, я создал этот кусок кода, который помог мне.

ClassLoader c=getClass().getClassLoader();
logmsg("c="+c);
URLClassLoader u=(URLClassLoader)c;
URL[] urls=u.getURLs();
for (URL i : urls) {
    logmsg("url: "+i);
}

Это дало этот результат:

classpath=/dd/apache-tomcat-7.0.29/bin/bootstrap.jar:/dd/apache-tomcat-7.0.29/bin/tomcat-juli.jar
c=WebappClassLoader
  context: /xxx
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@35c0e45a

url: file:/DT/DEV/dev/mko/apache-tomcat-7.0.29/webapps/xxx/WEB-INF/classes/
url: file:/DT/DEV/dev/mko/apache-tomcat-7.0.29/webapps/xxx/WEB-INF/lib/commons-codec.jar
url: file:/DT/DEV/dev/mko/apache-tomcat-7.0.29/webapps/xxx/WEB-INF/lib/commons-fileupload.jar
url: file:/DT/DEV/dev/mko/apache-tomcat-7.0.29/webapps/xxx/WEB-INF/lib/commons-logging-api.jar
url: file:/DT/DEV/dev/mko/apache-tomcat-7.0.29/webapps/xxx/WEB-INF/lib/commons-logging.jar
url: file:/DT/DEV/dev/mko/apache-tomcat-7.0.29/webapps/xxx/WEB-INF/lib/freemarker.jar
url: file:/DT/DEV/dev/mko/apache-tomcat-7.0.29/webapps/xxx/WEB-INF/lib/h2.jar
url: file:/DT/DEV/dev/mko/apache-tomcat-7.0.29/webapps/xxx/WEB-INF/lib/js.jar
url: file:/DT/DEV/dev/mko/apache-tomcat-7.0.29/webapps/xxx/WEB-INF/lib/log4j-1.2.8.jar
2 голосов
/ 11 марта 2011

Как правило, ваши файлы должны быть в классах WEB-INF / lib и WEB-INF / - и все. Что за тайна?

0 голосов
/ 16 марта 2018

на основе ответа Rok. Если вы используете Eclipse, запустите этот код на вкладке «Вид», когда находитесь в точке останова, и вы получите путь к классу в файле

StringBuilder sb = new StringBuilder();
java.net.URL[] urls=((java.net.URLClassLoader)getClass().getClassLoader()).getURLs();
for (java.net.URL u : urls) {
  sb.append(u+"\n");
}
org.apache.commons.io.FileUtils.writeStringToFile(new java.io.File("/tmp/classpath"), sb.toString());
...