@@ -486,17 +486,26 @@ private static List<String> getClassNamesFromPackage(ClassLoader classLoader, St
486
486
487
487
private static void processJarPackage (URL packageURL , String packageName , String pkg , ArrayList <String > names ) throws IOException {
488
488
String jarFileName = URLDecoder .decode (packageURL .getFile (), "UTF-8" );
489
- if (!jarFileName .startsWith ("jar:" ) && !jarFileName .startsWith ("nested:" )) {
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 ) {
490
500
logger .error ("Loading classes from jar with error packageURL: {}" , jarFileName );
491
501
return ;
492
502
}
493
503
logger .info ("Loading classes from jar {}" , jarFileName );
494
- try (JarFile jf = ((JarURLConnection ) packageURL .openConnection ()).getJarFile ()) {
495
- Enumeration <JarEntry > jarEntries = jf .entries ();
496
- while (jarEntries .hasMoreElements ()) {
497
- processJarEntry (jarEntries .nextElement (), packageName , pkg , names );
498
- }
504
+ Enumeration <JarEntry > jarEntries = jf .entries ();
505
+ while (jarEntries .hasMoreElements ()) {
506
+ processJarEntry (jarEntries .nextElement (), packageName , pkg , names );
499
507
}
508
+ jf .close ();
500
509
}
501
510
502
511
private static void processJarEntry (JarEntry jarEntry , String packageName , String pkg , ArrayList <String > names ) {
0 commit comments