Index: lutinutil/src/java/org/codelutin/util/Resource.java diff -u lutinutil/src/java/org/codelutin/util/Resource.java:1.30 lutinutil/src/java/org/codelutin/util/Resource.java:1.31 --- lutinutil/src/java/org/codelutin/util/Resource.java:1.30 Fri Feb 8 13:11:33 2008 +++ lutinutil/src/java/org/codelutin/util/Resource.java Thu Feb 21 21:00:23 2008 @@ -23,9 +23,9 @@ * * @author POUSSIN Benjamin * Copyright Code Lutin -* @version $Revision: 1.30 $ +* @version $Revision: 1.31 $ * -* Mise a jour: $Date: 2008-02-08 13:11:33 $ +* Mise a jour: $Date: 2008-02-21 21:00:23 $ * par : $Author: tchemit $ */ @@ -42,10 +42,14 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Properties; +import java.util.jar.JarFile; +import java.util.jar.Manifest; +import java.util.jar.Attributes; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -228,6 +232,18 @@ HashList urlList = new HashList(); URL[] arrayURL = classLoader.getURLs(); + if (arrayURL.length == 1) { + URL jarURL = arrayURL[0]; + if (isJar(jarURL.toString())) { + // jar invocation + try { + arrayURL = getClassPathURLsFromJarManifest(jarURL); + } catch (Exception e) { + log.warn(e); + arrayURL = new URL[]{jarURL}; + } + } + } if (log.isInfoEnabled()) { log.info("search URLs pattern: " + pattern + " in " + arrayURL.length+" urls"); } else { @@ -254,6 +270,38 @@ return urlList; } + static public URL[] getClassPathURLsFromJarManifest(URL jarURL) throws IOException, URISyntaxException { + JarFile jar=null; + URL[] result; + try { + String jarPath = jarURL.toURI().getPath(); + File jarFile = new File(jarPath); + if (log.isInfoEnabled()) { + log.info("class-path jar to scan " + jarPath); + } + jar = new JarFile(jarFile); + File container = jarFile.getParentFile(); + Manifest mf = jar.getManifest(); + String classPath = mf.getMainAttributes().getValue(Attributes.Name.CLASS_PATH); + String[] paths = classPath.split(" "); + result = new URL[paths.length + 1]; + result[0] = jarURL; + for (int i = 0; i < paths.length; i++) { + File path = new File(container, paths[i]); + if (log.isDebugEnabled()) { + log.debug(path); + } + result[i + 1] = path.toURI().toURL(); + } + jar.close(); + } finally { + if (jar!=null) { + jar.close(); + } + } + return result; + } + static public List getURLsFromJar(File jarfile, String pattern) { try{ if(log.isTraceEnabled()) {