private static Collection<Location> findMissedClassesDueToLackOfPackageEntry(
            Iterable<URL> classpath, NormalizedResourceName resourceName) {

        Set<Location> result = new HashSet<>();
        for (Location location : archiveLocationsOf(classpath)) {
            if (containsEntryWithPrefix(location, resourceName)) {
                result.add(location.append(resourceName.toString()));
            }
        }
        return result;
    }
private static Collection < Location > findMissedClassesDueToLackOfPackageEntry ( Iterable < URL > classpath , NormalizedResourceName resourceName ) { Set < Location > result = new HashSet < > ( ) ; for ( Location location : archiveLocationsOf ( classpath ) ) { if ( containsEntryWithPrefix ( location , resourceName ) ) { result . add ( location . append ( resourceName . toString ( ) ) ) ; } } return result ; }
Unfortunately the behavior with archives is not completely consistent. Originally,
{@link Locations#ofPackage(String)} simply asked all {@link java.net.URLClassLoader}s, for
{@link ClassLoader#getResources(String)} of the respective resource name.
E.g.
<pre><code>importPackage("org.junit") -> getResources("/org/junit")</code></pre>
However, this only works, if all respective archives contain an entry for the folder, which is not always the
case. Consider the standard JRE "rt.jar", which does not contain an entry "/java/io", but nonetheless
entries like "/java/io/File.class". Thus an import of "java.io", relying on
{@link ClassLoader#getResources(String)}, would not import <code>java.io.File</code>.