@@ -486,17 +486,26 @@ private static List<String> getClassNamesFromPackage(ClassLoader classLoader, St
486486
487487 private static void processJarPackage (URL packageURL , String packageName , String pkg , ArrayList <String > names ) throws IOException {
488488 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 ) {
490500 logger .error ("Loading classes from jar with error packageURL: {}" , jarFileName );
491501 return ;
492502 }
493503 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 );
499507 }
508+ jf .close ();
500509 }
501510
502511 private static void processJarEntry (JarEntry jarEntry , String packageName , String pkg , ArrayList <String > names ) {
0 commit comments