public RepositorySystemSession getSession(Task task, LocalRepository localRepo) {
    DefaultRepositorySystemSession session = new MavenRepositorySystemSession();

    Map<Object, Object> configProps = new LinkedHashMap<Object, Object>();
    configProps.put(ConfigurationProperties.USER_AGENT, getUserAgent());
    configProps.putAll(System.getProperties());
    configProps.putAll((Map<?, ?>) project.getProperties());
    configProps.putAll((Map<?, ?>) project.getUserProperties());
    session.setConfigProps(configProps);

    session.setNotFoundCachingEnabled(false);
    session.setTransferErrorCachingEnabled(false);

    session.setOffline(isOffline());
    session.setUserProps(project.getUserProperties());

    session.setLocalRepositoryManager(getLocalRepoMan(localRepo));

    session.setProxySelector(getProxySelector());
    session.setMirrorSelector(getMirrorSelector());
    session.setAuthenticationSelector(getAuthSelector());

    session.setCache(new DefaultRepositoryCache());

    session.setRepositoryListener(new AntRepositoryListener(task));
    session.setTransferListener(new AntTransferListener(task));

    session.setWorkspaceReader(ProjectWorkspaceReader.getInstance());

    return session;
  }