|
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