
org.echocat.jomon.maven.MavenProjectWithModulesFactory Maven / Gradle / Ivy
/*****************************************************************************************
* *** BEGIN LICENSE BLOCK *****
*
* Version: MPL 2.0
*
* echocat Jomon, Copyright (c) 2012-2013 echocat
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* *** END LICENSE BLOCK *****
****************************************************************************************/
package org.echocat.jomon.maven;
import org.apache.maven.project.*;
import javax.annotation.Nonnull;
import java.io.File;
import java.util.*;
import java.util.Map.Entry;
import static java.util.Arrays.asList;
public class MavenProjectWithModulesFactory {
@Nonnull
public MavenProjectWithModules createFor(@Nonnull MavenEnvironment environment, @Nonnull File pomFile) throws Exception {
final ProjectBuildingRequest request = createRequest(environment);
return createProjectBy(environment, pomFile, request);
}
@Nonnull
protected ProjectBuildingRequest createRequest(@Nonnull MavenEnvironment environment) {
final DefaultProjectBuildingRequest request = new DefaultProjectBuildingRequest();
request.setLocalRepository(environment.getRequest().getLocalRepository());
request.setRemoteRepositories(environment.getRequest().getRemoteRepositories());
request.setProfiles(environment.getRequest().getProfiles());
request.setSystemProperties(environment.getRequest().getSystemProperties());
request.setUserProperties(environment.getRequest().getUserProperties());
request.setRepositorySession(environment.getRepositorySystemSession());
return request;
}
@Nonnull
protected MavenProjectWithModules createProjectBy(@Nonnull MavenEnvironment environment, @Nonnull File pomFile, @Nonnull ProjectBuildingRequest request) throws Exception {
final List results = environment.getProjectBuilder().build(asList(pomFile), true, request);
return resultsToProject(pomFile, results);
}
@Nonnull
protected MavenProjectWithModules resultsToProject(@Nonnull File basePomFile, @Nonnull List results) throws Exception {
final Map projectToProjectWithModules = new HashMap<>();
for (final ProjectBuildingResult result : results) {
if (!result.getProblems().isEmpty()) {
throw new ProjectBuildingException(results);
}
final MavenProjectWithModules projectWithModules = getMavenProjectWithModules(result, projectToProjectWithModules);
resolveModulesFor(projectWithModules, result, results, projectToProjectWithModules);
}
return selectBaseProject(basePomFile.getCanonicalFile(), projectToProjectWithModules);
}
private MavenProjectWithModules selectBaseProject(File by, Map from) throws Exception {
MavenProjectWithModules result = null;
for (final Entry projectAndProjectWithModules : from.entrySet()) {
final MavenProject project = projectAndProjectWithModules.getKey();
if (project.getFile() != null && by.equals(project.getFile().getCanonicalFile())) {
result = projectAndProjectWithModules.getValue();
break;
}
}
if (result == null) {
throw new IllegalStateException("Could not find any project for base pom '" + by + "' in " + from.values() + ".");
}
return result;
}
@Nonnull
protected void resolveModulesFor(@Nonnull MavenProjectWithModules of, @Nonnull ProjectBuildingResult forResult, @Nonnull List fromResults, @Nonnull Map withProjectToProjectWithModules) throws Exception {
for (final ProjectBuildingResult result : fromResults) {
if (!result.getProblems().isEmpty()) {
throw new ProjectBuildingException(fromResults);
}
for (final String moduleName : forResult.getProject().getModules()) {
final File pomFile = result.getPomFile();
final File expectedFile = new File(forResult.getPomFile().getParentFile(), moduleName + File.separator + pomFile.getName());
if (expectedFile.getCanonicalFile().equals(pomFile.getCanonicalFile())) {
of.addModule(getMavenProjectWithModules(result, withProjectToProjectWithModules));
break;
}
}
}
}
@Nonnull
protected MavenProjectWithModules getMavenProjectWithModules(@Nonnull ProjectBuildingResult forResult, @Nonnull Map fromProjectToProjectWithModules) {
final MavenProject project = forResult.getProject();
MavenProjectWithModules projectWithModules = fromProjectToProjectWithModules.get(project);
if (projectWithModules == null) {
projectWithModules = new MavenProjectWithModules(project);
fromProjectToProjectWithModules.put(project, projectWithModules);
}
return projectWithModules;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy