in src/main/java/org/apache/maven/plugin/compiler/ToolExecutor.java [301:356]
public boolean applyIncrementalBuild(final AbstractCompilerMojo mojo, final Options configuration)
throws IOException {
final boolean checkSources = incrementalBuildConfig.contains(IncrementalBuild.Aspect.SOURCES);
final boolean checkClasses = incrementalBuildConfig.contains(IncrementalBuild.Aspect.CLASSES);
final boolean checkDepends = incrementalBuildConfig.contains(IncrementalBuild.Aspect.DEPENDENCIES);
final boolean checkOptions = incrementalBuildConfig.contains(IncrementalBuild.Aspect.OPTIONS);
if (checkSources | checkClasses | checkDepends | checkOptions) {
incrementalBuild =
new IncrementalBuild(mojo, sourceFiles, checkSources, configuration, incrementalBuildConfig);
String causeOfRebuild = null;
if (checkSources) {
// Should be first, because this method deletes output files of removed sources.
causeOfRebuild = incrementalBuild.inputFileTreeChanges();
}
if (checkClasses && causeOfRebuild == null) {
causeOfRebuild = incrementalBuild.markNewOrModifiedSources();
}
if (checkDepends && causeOfRebuild == null) {
List<String> fileExtensions = mojo.fileExtensions;
if (fileExtensions == null || fileExtensions.isEmpty()) {
fileExtensions = List.of("class", "jar");
}
causeOfRebuild = incrementalBuild.dependencyChanges(dependencies.values(), fileExtensions);
}
if (checkOptions && causeOfRebuild == null) {
causeOfRebuild = incrementalBuild.optionChanges();
}
if (causeOfRebuild != null) {
if (!sourceFiles.isEmpty()) { // Avoid misleading message such as "all sources changed".
logger.info(causeOfRebuild);
}
} else {
isPartialBuild = true;
sourceFiles = incrementalBuild.getModifiedSources();
if (IncrementalBuild.isEmptyOrIgnorable(sourceFiles)) {
incrementalBuildConfig.clear(); // Prevent this method to be executed twice.
logger.info("Nothing to compile - all classes are up to date.");
sourceFiles = List.of();
return false;
} else {
int n = sourceFiles.size();
var sb = new StringBuilder("Compiling ").append(n).append(" modified source file");
if (n > 1) {
sb.append('s'); // Make plural.
}
logger.info(sb.append('.'));
}
}
if (!(checkSources | checkDepends | checkOptions)) {
incrementalBuild.deleteCache();
incrementalBuild = null;
}
}
incrementalBuildConfig.clear(); // Prevent this method to be executed twice.
return true;
}