|
22 | 22 | import java.io.File; |
23 | 23 |
|
24 | 24 | import java.io.IOException; |
| 25 | +import java.net.JarURLConnection; |
25 | 26 | import java.net.URI; |
26 | 27 | import java.net.URL; |
27 | 28 | import java.net.URLDecoder; |
@@ -485,14 +486,26 @@ private static List<String> getClassNamesFromPackage(ClassLoader classLoader, St |
485 | 486 |
|
486 | 487 | private static void processJarPackage(URL packageURL, String packageName, String pkg, ArrayList<String> names) throws IOException { |
487 | 488 | String jarFileName = URLDecoder.decode(packageURL.getFile(), "UTF-8"); |
488 | | - jarFileName = jarFileName.substring(5, jarFileName.indexOf("!")); |
| 489 | + JarFile jf = null; |
| 490 | + // jar: client in repository; nested: client in a fat jar |
| 491 | + if (jarFileName.startsWith("jar:") || jarFileName.startsWith("nested:")) { |
| 492 | + jf = ((JarURLConnection) packageURL.openConnection()).getJarFile(); |
| 493 | + } |
| 494 | + // file: client is a file in target (unit test) |
| 495 | + if (jarFileName.startsWith("file:") ) { |
| 496 | + jarFileName = jarFileName.substring(5, jarFileName.indexOf("!")); |
| 497 | + jf = new JarFile(jarFileName); |
| 498 | + } |
| 499 | + if (jf == null) { |
| 500 | + logger.error("Loading classes from jar with error packageURL: {}", jarFileName); |
| 501 | + return; |
| 502 | + } |
489 | 503 | logger.info("Loading classes from jar {}", jarFileName); |
490 | | - try (JarFile jf = new JarFile(jarFileName)) { |
491 | | - Enumeration<JarEntry> jarEntries = jf.entries(); |
492 | | - while (jarEntries.hasMoreElements()) { |
493 | | - processJarEntry(jarEntries.nextElement(), packageName, pkg, names); |
494 | | - } |
| 504 | + Enumeration<JarEntry> jarEntries = jf.entries(); |
| 505 | + while (jarEntries.hasMoreElements()) { |
| 506 | + processJarEntry(jarEntries.nextElement(), packageName, pkg, names); |
495 | 507 | } |
| 508 | + jf.close(); |
496 | 509 | } |
497 | 510 |
|
498 | 511 | private static void processJarEntry(JarEntry jarEntry, String packageName, String pkg, ArrayList<String> names) { |
|
0 commit comments