79 lines
3.4 KiB
Java
79 lines
3.4 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.*;
|
|
import org.apache.maven.project.MavenProject;
|
|
|
|
/** Runs after package in Maven's process; no application class is loaded into a designer host. */
|
|
@Mojo(name = "capture", requiresDependencyResolution = ResolutionScope.TEST, threadSafe = true)
|
|
public final class CaptureMojo extends AbstractMojo {
|
|
@Parameter(defaultValue = "${project}", readonly = true, required = true)
|
|
private MavenProject project;
|
|
|
|
@Parameter(defaultValue = "${session}", readonly = true, required = true)
|
|
private MavenSession session;
|
|
|
|
@Parameter(property = "designer.captureDir", required = true)
|
|
private java.io.File directory;
|
|
|
|
public void execute() throws MojoExecutionException {
|
|
try {
|
|
var proof = new Properties();
|
|
try (var in =
|
|
Files.newInputStream(
|
|
directory.toPath().resolve(DependencyProof.id(project) + ".dependencies"))) {
|
|
proof.load(in);
|
|
}
|
|
DependencyProof.verify(proof);
|
|
var p = new Properties();
|
|
p.putAll(proof);
|
|
p.setProperty("format", "2");
|
|
p.setProperty("module", project.getBasedir().getCanonicalPath());
|
|
p.setProperty(
|
|
"coordinates",
|
|
project.getGroupId() + ":" + project.getArtifactId() + ":" + project.getVersion());
|
|
p.setProperty("packaging", project.getPackaging());
|
|
list(p, "runtime", project.getRuntimeClasspathElements());
|
|
list(p, "test", project.getTestClasspathElements());
|
|
var roots = new ArrayList<String>(project.getCompileSourceRoots());
|
|
roots.addAll(project.getTestCompileSourceRoots());
|
|
project.getResources().forEach(r -> roots.add(r.getDirectory()));
|
|
project.getTestResources().forEach(r -> roots.add(r.getDirectory()));
|
|
list(p, "sources", roots);
|
|
var dependencies = new ArrayList<String>();
|
|
for (var a : project.getArtifacts())
|
|
for (var other : session.getProjects())
|
|
if (a.getGroupId().equals(other.getGroupId())
|
|
&& a.getArtifactId().equals(other.getArtifactId())
|
|
&& a.getVersion().equals(other.getVersion()))
|
|
dependencies.add(other.getBasedir().getCanonicalPath());
|
|
list(p, "dependencies", dependencies);
|
|
list(p, "profiles", session.getRequest().getActiveProfiles());
|
|
Files.createDirectories(directory.toPath());
|
|
String id =
|
|
HexFormat.of()
|
|
.formatHex(
|
|
java.security.MessageDigest.getInstance("SHA-256")
|
|
.digest(
|
|
project
|
|
.getBasedir()
|
|
.getCanonicalPath()
|
|
.getBytes(java.nio.charset.StandardCharsets.UTF_8)));
|
|
try (var out = Files.newOutputStream(directory.toPath().resolve(id + ".properties"))) {
|
|
p.store(out, "Neitzel FX Designer effective Maven capture");
|
|
}
|
|
} catch (Exception e) {
|
|
throw new MojoExecutionException("Cannot capture effective Maven metadata", e);
|
|
}
|
|
}
|
|
|
|
private static void list(Properties p, String name, List<String> values) {
|
|
p.setProperty(name + ".count", Integer.toString(values.size()));
|
|
for (int i = 0; i < values.size(); i++) p.setProperty(name + "." + i, values.get(i));
|
|
}
|
|
}
|