lib/ext JAR file search order

Mandy Chung mandy.chung at oracle.com
Fri Nov 15 21:15:48 UTC 2013


On 11/15/2013 12:37 PM, Ioi Lam wrote:
> From sun.misc.Launcher$ExtClassLoader:
>
>         private static URL[] getExtURLs(File[] dirs) throws IOException {
>             Vector<URL> urls = new Vector<URL>();
>             for (int i = 0; i < dirs.length; i++) {
>                 String[] files = dirs[i].list();
>                 if (files != null) {
>                     for (int j = 0; j < files.length; j++) {
>                         if (!files[j].equals("meta-index")) {
>                             File f = new File(dirs[i], files[j]);
>                             urls.add(getFileURL(f));
>                         }
>                     }
>                 }
>             }
>             URL[] ua = new URL[urls.size()];
>             urls.copyInto(ua);
>             return ua;
>         }
>
>
> the search order is completely depending on the order of files 
> returned by File.list(), whose Javadoc explictly says the order is not 
> defined:
>
> http://docs.oracle.com/javase/6/docs/api/java/io/File.html#list()
>
>   "There is no guarantee that the name strings in the
>    resulting array will appear in any specific order;
>    they are not, in particular, guaranteed to appear
>    in alphabetical order."
>
> So, what happens when the same class file exists in two JAR files in 
> lib/ext?
>

AFAIK The extension mechanism [1] doesn't specify the ordering of files 
searched in the directories listed in
java.ext.dirs system property.

If there are two JAR files in lib/ext containing the class file of the 
same name, the behavior is undefined.

Mandy
[1] 
http://docs.oracle.com/javase/7/docs/technotes/guides/extensions/spec.html#installed




More information about the core-libs-dev mailing list