in src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java [181:227]
static boolean hasBadOutputTimestamp(
String outputTimestamp, Log log, MavenProject project, MavenSession session, boolean diagnose) {
Instant timestamp =
MavenArchiver.parseBuildOutputTimestamp(outputTimestamp).orElse(null);
String effective = ((timestamp == null) ? "disabled" : DateTimeFormatter.ISO_INSTANT.format(timestamp));
if (diagnose) {
diagnose(outputTimestamp, log, project, session, effective);
}
if (timestamp == null) {
log.error("Reproducible Build not activated by project.build.outputTimestamp property: "
+ "see https://maven.apache.org/guides/mini/guide-reproducible-builds.html");
String projectProperty = project.getProperties().getProperty("project.build.outputTimestamp");
if (projectProperty != null && projectProperty.startsWith("${git.")) {
log.error("project.build.outputTimestamp = \"" + projectProperty + "\": isn't Git value set?");
log.error("Did validate phase run and Git plugin set the value?");
if (project.getPackaging().equals("pom")) {
log.error("if using git-commit-id-plugin, <skipPoms>false</skipPoms> may solve the issue.");
}
}
return true;
}
if (log.isDebugEnabled()) {
log.debug("project.build.outputTimestamp = \"" + outputTimestamp + "\" => "
+ (effective.equals(outputTimestamp) ? "" : (" => " + effective)));
}
// check if timestamp defined in a project from reactor: info if it is not the case
boolean parentInReactor = false;
MavenProject reactorParent = project;
while (session.getProjects().contains(reactorParent.getParent())) {
parentInReactor = true;
reactorParent = reactorParent.getParent();
}
String prop = reactorParent.getOriginalModel().getProperties().getProperty("project.build.outputTimestamp");
if (prop == null) {
log.info("<project.build.outputTimestamp> property (= " + outputTimestamp + ") is inherited"
+ (parentInReactor ? " from outside the reactor" : "") + ", you can override in "
+ (parentInReactor ? "parent POM from reactor " + reactorParent.getFile() : "pom.xml"));
return false;
}
return false;
}