2013-02-27 9 views
1

Мое приложение запускается с помощью некоторого процесса (control-m). Он запускается из сценария bash, который я могу изменить (скрипт вызывается другим процессом).Почему класс загружается, если не в classpath?

Приложение запускается с неправильной версией пружины. Дело в том, что я знаю, какой jar загружается, но это не в classpath! Путь к классам предоставляется в сценарии bash. Я также подтвердил это, выполнив:

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

Но все же некоторые банки были закодированы, которых не должно быть. У меня есть -verbose: class в командной строке. Как я могу узнать, почему классы, которые мне нужны, загружаются из недействительных банок? Почему эти ярды даже загружаются? Как отладить процесс загрузки классов?

Когда я запускаю скрипт (вместо этого другого процесса) из моей учетной записи пользователя, все в порядке.

+0

Может ли быть что-то в окружающей среде, например переменная среды CLASSPATH? – danpaq

+0

№ Нет. – mabn

+0

Также убедитесь, что вы используете одну и ту же JVM. – danpaq

ответ

0

Я нашел причину. На пути к классам была банка, которая имела разрешения, установленные таким образом, что обычный пользователь не имел к ней доступа, но control-m. Когда я бегал с моей учетной записи, он игнорировал эту банку, и все работало нормально.

Но при запуске control-m он загружал эту банку, которая дополнительно имела запись «Class-Path» в манифесте и которая меняла процесс загрузки класса.

Смежные вопросы