URI spiUri = appendFragment( descriptor.getURI(), "spi" ); ClassLoader spi = buildClassLoader( spiUri, api, spis );
String spiLabel = appendFragment( descriptor.getURI(), "spi" ); ClassLoader spi = buildClassLoader( spiLabel, api, spis );
    private ClassLoader createClassLoader( ClassLoader base, Plugin descriptor )        throws IOException, NullArgumentException    {        if( null == descriptor )        {            throw new NullArgumentException( "descriptor" );        }        if( null == base )        {            throw new NullArgumentException( "base" );        }        URI[] apiArtifacts = descriptor.getDependencies( Plugin.API_KEY );        URL[] apis = getURLs( apiArtifacts  );        URI apiUri = appendFragment( descriptor.getURI(), "api" );        ClassLoader api = buildClassLoader( apiUri, base, apis );        URI[] spiArtifacts = descriptor.getDependencies( Plugin.SPI_KEY );        URL[] spis = getURLs( spiArtifacts );        URI spiUri = appendFragment( descriptor.getURI(), "spi" );        ClassLoader spi = buildClassLoader( spiUri, api, spis );        URI[] impArtifacts = descriptor.getDependencies( Plugin.IMPL_KEY );        URL[] imps = getURLs( impArtifacts );        URI implUri = appendFragment( descriptor.getURI(), "impl" );        ClassLoader classloader = buildClassLoader( implUri, spi, imps );        return classloader;    }