50 lines
2.3 KiB
Java
50 lines
2.3 KiB
Java
package de.neitzel.fxdesigner.maven;
|
|
|
|
import java.nio.file.*;
|
|
import java.util.*;
|
|
import org.apache.maven.execution.MavenSession;
|
|
import org.apache.maven.plugin.AbstractMojo;
|
|
import org.apache.maven.plugin.MojoExecutionException;
|
|
import org.apache.maven.plugins.annotations.*;
|
|
|
|
/** Validates Maven's selected effective projects before any application lifecycle phase. */
|
|
@Mojo(name = "plan", aggregator = true, threadSafe = true)
|
|
public final class PlanMojo extends AbstractMojo {
|
|
@Parameter(defaultValue = "${session}", readonly = true, required = true)
|
|
private MavenSession session;
|
|
|
|
@Parameter(property = "designer.workspace", required = true)
|
|
private java.io.File workspace;
|
|
|
|
public void execute() throws MojoExecutionException {
|
|
try {
|
|
Path root = workspace.toPath().toRealPath();
|
|
var activeProfiles = new HashSet<String>();
|
|
for (var project : session.getProjects()) {
|
|
Path base = project.getBasedir().toPath().toRealPath();
|
|
if (!base.startsWith(root))
|
|
throw new IllegalArgumentException("Module outside isolated reactor");
|
|
var paths = new ArrayList<String>();
|
|
paths.add(project.getBuild().getDirectory());
|
|
paths.add(project.getBuild().getOutputDirectory());
|
|
paths.add(project.getBuild().getTestOutputDirectory());
|
|
paths.addAll(project.getCompileSourceRoots());
|
|
paths.addAll(project.getTestCompileSourceRoots());
|
|
project.getResources().forEach(r -> paths.add(r.getDirectory()));
|
|
project.getTestResources().forEach(r -> paths.add(r.getDirectory()));
|
|
for (String path : paths)
|
|
if (!Path.of(path).toAbsolutePath().normalize().startsWith(base))
|
|
throw new IllegalArgumentException(
|
|
"Effective source/output path outside module: " + path);
|
|
project.getActiveProfiles().forEach(p -> activeProfiles.add(p.getId()));
|
|
project.getInjectedProfileIds().values().forEach(activeProfiles::addAll);
|
|
getLog().info("Designer scope: " + root.relativize(base) + " (" + project.getId() + ")");
|
|
}
|
|
if (!activeProfiles.containsAll(session.getRequest().getActiveProfiles()))
|
|
throw new IllegalArgumentException("Requested Maven profile did not activate");
|
|
} catch (Exception e) {
|
|
throw new MojoExecutionException("Unsupported effective Maven build plan", e);
|
|
}
|
|
}
|
|
}
|