@Override public MavenSession reloadReactor(MavenProject rootProject, MavenSession oldSession) throws ReactorReloadException { List<MavenProject> reactorProjects = new ArrayList<MavenProject>(); List<File> pomFiles = newArrayList(rootProject.getFile()); try { MavenProject project = null; // try maven3 first try { if (rootProject.getFile().exists() && rootProject.getFile().canRead()) { Method getRequestMethod = oldSession.getClass().getMethod("getRequest"); Object mavenExecutionRequest = getRequestMethod.invoke(oldSession); Method getProjectBuildingRequest = mavenExecutionRequest.getClass().getMethod("getProjectBuildingRequest"); Object pbr = getProjectBuildingRequest.invoke(mavenExecutionRequest); Object pb = oldSession.getContainer().lookup("org.apache.maven.project.ProjectBuilder"); Class requestClass = Class.forName("org.apache.maven.project.ProjectBuildingRequest"); Method buildMethod = pb.getClass().getMethod("build", List.class, boolean.class, requestClass); List results = (List) buildMethod.invoke(pb, pomFiles, true, pbr); for (Object result : results) { Method getProjectMethod = result.getClass().getMethod("getProject"); getProjectMethod.setAccessible(true); project = (MavenProject) getProjectMethod.invoke(result); project.setActiveProfiles(rootProject.getActiveProfiles()); reactorProjects.add(project); } } } catch (Exception e) { // MJF-112: Check that the exception is a result of not having Maven 3 // installed, or a genuine project configuration error try { oldSession.getClass().getMethod("getProjectBuilderConfiguration"); } catch (NoSuchMethodException e1) { // There is no Maven 2 environment, just report the error throw e; } Stack<File> projectFiles = new Stack<File>(); projectFiles.push(rootProject.getFile()); while (!projectFiles.isEmpty()) { File file = (File) projectFiles.pop(); if (!file.exists() || !file.canRead()) { continue; } // Fallback to Maven 2 API project = projectBuilder.build(file, oldSession.getProjectBuilderConfiguration()); project.setActiveProfiles(rootProject.getActiveProfiles()); List<String> moduleNames = project.getModules(); for (String moduleName : moduleNames) { // if moduleName is a file treat as explicitly defined pom.xml File baseFile = new File(file.getParentFile(), moduleName); if (baseFile.isFile()) { projectFiles.push(baseFile); } else { projectFiles.push(new File(baseFile, File.separator + "pom.xml")); } } reactorProjects.add(project); } } ReactorManager reactorManager = new ReactorManager(reactorProjects); MavenSession newSession = new MavenSession( oldSession.getContainer(), oldSession.getSettings(), oldSession.getLocalRepository(), oldSession.getEventDispatcher(), reactorManager, oldSession.getGoals(), oldSession.getExecutionRootDirectory(), oldSession.getExecutionProperties(), oldSession.getUserProperties(), oldSession.getStartTime()); // in case of maven 3 try { Method setProjectsMethod = newSession.getClass().getMethod("setProjects", List.class); setProjectsMethod.invoke(newSession, reactorManager.getSortedProjects()); } catch (Exception ignore) { // ignore } return newSession; } catch (Exception e) { throw new ReactorReloadException("Error reloading Maven reactor projects", e); } }