Maven Runtime can introspect a class loader to obtain metadata for each Maven project accessible within it.
To obtain a list of MavenProjectProperties instances for each Maven project accessible within a specified class loader:
/**
 * @component
 */
private MavenRuntime runtime;
public void processProjects() throws MavenRuntimeException
{
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    
    List<MavenProjectProperties> projects = runtime.getProjectsProperties( classLoader );
    
    // process projects
}
To obtain a list of MavenProject instances for each Maven project accessible within a specified class loader:
/**
 * @component
 */
private MavenRuntime runtime;
public void processProjects() throws MavenRuntimeException
{
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    
    List<MavenProject> projects = runtime.getProjects( classLoader );
    
    // process projects
}
When obtaining Maven metadata using project XML, the resultant MavenProject instances can be sorted by dependency order. To obtain a list of MavenProject instances for each Maven project accessible within a specified class loader ordered by their dependencies:
/**
 * @component
 */
private MavenRuntime runtime;
public void processProjects() throws MavenRuntimeException
{
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    
    List<MavenProject> projects = runtime.getSortedProjects( classLoader );
    
    // process projects
}
Note that project properties cannot be sorted by dependency order since they do not contain any dependency information.