diff --git a/src/it/buildinfo-skip-install-deploy/modSkipModule/pom.xml b/src/it/buildinfo-skip-install-deploy/modSkipModule/pom.xml new file mode 100644 index 0000000..4cf60b8 --- /dev/null +++ b/src/it/buildinfo-skip-install-deploy/modSkipModule/pom.xml @@ -0,0 +1,34 @@ + + + + + + 4.0.0 + + + org.apache.maven.plugins.it + multi + 1.0-SNAPSHOT + + multi-mod-skip-module + multi-module module that will be skipped by configuring artifact plugin with skipModules + then should not be added to buildinfo + diff --git a/src/it/buildinfo-skip-install-deploy/pom.xml b/src/it/buildinfo-skip-install-deploy/pom.xml index f0a1092..43108f7 100644 --- a/src/it/buildinfo-skip-install-deploy/pom.xml +++ b/src/it/buildinfo-skip-install-deploy/pom.xml @@ -50,6 +50,7 @@ modSkipInstall modSkipDeploy + modSkipModule modB modA modSkipAtEnd @@ -66,6 +67,11 @@ buildinfo + + + */*-module + + diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java index c3a485f..33c4b27 100644 --- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java +++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java @@ -24,11 +24,12 @@ import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; +import java.nio.file.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import org.apache.maven.archiver.MavenArchiver; import org.apache.maven.artifact.Artifact; @@ -90,6 +91,15 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo { @Parameter(property = "buildinfo.detect.skip", defaultValue = "true") private boolean detectSkip; + /** + * Avoid taking fingerprints for modules specified as glob matching against ${groupId}/${artifactId}. + * @since 3.5.0 + */ + @Parameter + private List skipModules; + + private List skipModulesMatcher = null; + /** * Makes the generated {@code .buildinfo} file reproducible, by dropping detailed environment recording: OS will be * recorded as "Windows" or "Unix", JVM version as major version only. @@ -274,7 +284,20 @@ private MavenProject getLastProject() { } private boolean isSkip(MavenProject project) { - return detectSkip && PluginUtil.isSkip(project); + // manual/configured module skip + boolean skipModule = false; + if (skipModules != null && !skipModules.isEmpty()) { + if (skipModulesMatcher == null) { + FileSystem fs = FileSystems.getDefault(); + skipModulesMatcher = skipModules.stream() + .map(i -> fs.getPathMatcher("glob:" + i)) + .collect(Collectors.toList()); + } + Path path = Paths.get(project.getGroupId() + '/' + project.getArtifactId()); + skipModule = skipModulesMatcher.stream().anyMatch(m -> m.matches(path)); + } + // detected skip + return skipModule || (detectSkip && PluginUtil.isSkip(project)); } private Toolchain getToolchain() {