2013-02-27 18 views
1

我的應用程序由某個進程啓動(control-m)。它是從我可以修改的bash腳本開始的(該腳本是由其他進程調用的)。爲什麼不在類路徑中加載類?

該應用程序正在使用錯誤的版本春天的運行。事情是 - 我知道哪個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()); 
} 

但仍然有一些瓶子是不應該被l l的。我在命令行中有-verbose:class。我怎樣才能找出爲什麼我需要的分類是從無效罐裝入的?爲什麼這些球員甚至被加載?如何調試類加載過程?

當我從我的用戶運行該腳本(而不是其他進程)的帳號,一切都很好。

+0

環境中是否存在某些東西,例如CLASSPATH環境變量? – danpaq 2013-02-27 20:56:34

+0

不是。它沒有設置。 – mabn 2013-02-27 21:01:33

+0

還請確保您使用的是相同的JVM。 – danpaq 2013-02-27 21:02:22

回答

0

我找到了原因。類路徑上有一個jar,它的權限設置爲普通用戶無法訪問它,但是control-m的確如此。從我的帳戶運行時,它忽略了這個jar,一切正常。

但是,當通過control -m運行時,它正在加載那個在清單中另外具有「Class-Path」條目並且正在改變類加載過程的jar。