@Override
    public Plugin loadPlugin(File file) throws InvalidPluginException, UnknownDependencyException {
        Validate.notNull(file, "File cannot be null");
        
        if (!file.exists()) {
            throw new InvalidPluginException(new FileNotFoundException(file.getPath() + " does not exist"));
        }
        
        final InjectorClassLoader loader;
        
        try {
            loader = new InjectorClassLoader(this, getClass().getClassLoader(), file);
            loader.initialize(loader.plugin);
            
        } catch (InvalidPluginException ex) {
            throw ex;
        } catch (Throwable ex) {
            throw new InvalidPluginException(ex);
        }
        
        Injector.getLogger().info("Successfully loaded " + loader.plugin.getName());
        loaders.put(loader.plugin.getName(), loader);
        
        return loader.plugin;
    }