in src/main/java/org/apache/sling/feature/maven/mojos/AnalyseFeaturesMojo.java [81:188]
public void execute() throws MojoExecutionException, MojoFailureException {
checkPreconditions();
List<Scan> list = scans;
if (list == null || list.isEmpty()) {
// use default configuration
final Scan a = new Scan();
a.setFilesInclude("**/*.*");
list = Collections.singletonList(a);
}
getLog().debug(MessageUtils.buffer().a("Setting up the ").strong("Scanner").a("...").toString());
Scanner scanner;
try {
scanner = new Scanner(getArtifactProvider());
} catch (final IOException e) {
throw new MojoExecutionException("A fatal error occurred while setting up the Scanner, see error cause:",
e);
}
getLog().debug(MessageUtils.buffer().strong("Scanner").a(" successfully set up").toString());
FeatureProvider featureProvider = getFeatureProvider();
boolean hasErrors = false;
for (final Scan an : list) {
try {
Map<String, Map<String, String>> taskConfiguration = an.getTaskConfiguration();
getLog().debug(MessageUtils.buffer().a("Setting up the ").strong("analyser")
.a(" with following configuration:").toString());
getLog().debug(" * Task Configuration = " + taskConfiguration);
Set<String> includedTasks = an.getIncludeTasks();
if (includedTasks == null) {
// use defaults
includedTasks = new HashSet<>();
includedTasks.add("bundle-packages");
includedTasks.add("requirements-capabilities");
includedTasks.add("apis-jar");
includedTasks.add("repoinit");
if (an.getExcludeTasks() != null) {
includedTasks.removeAll(an.getExcludeTasks());
if (includedTasks.isEmpty()) {
includedTasks = null;
}
}
}
getLog().debug(" * Include Tasks = " + includedTasks);
getLog().debug(" * Exclude Tasks = " + an.getExcludeTasks());
final Analyser analyser = new Analyser(scanner, taskConfiguration, includedTasks, an.getExcludeTasks());
getLog().debug(MessageUtils.buffer().strong("Analyser").a(" successfully set up").toString());
getLog().debug("Retrieving Feature files...");
final Collection<Feature> features = this.getSelectedFeatures(an).values();
if (features.isEmpty()) {
getLog().debug(
"There are no assciated feature files to current project, plugin execution will be skipped");
continue;
} else {
getLog().debug("Starting analysis of features...");
}
for (final Feature f : features) {
try {
getLog().debug(MessageUtils.buffer().a("Analyzing feature ").strong(f.getId().toMvnId())
.a(" ...").toString());
Dependency fwk = an.getFramework();
if (fwk == null) {
fwk = this.framework;
}
final AnalyserResult result = analyser.analyse(f, ProjectHelper.toArtifactId(fwk), featureProvider);
if ( logWarnings ) {
for (final String msg : result.getWarnings()) {
getLog().warn(msg);
}
}
for (final String msg : result.getErrors()) {
getLog().error(msg);
}
if (!result.getErrors().isEmpty()) {
getLog().error("Analyser detected errors on feature '" + f.getId().toMvnId()
+ "'. See log output for error messages.");
hasErrors = true;
} else {
getLog().debug(MessageUtils.buffer().a("feature ").project(f.getId().toMvnId())
.a(" succesfully passed all analysis").toString());
}
} catch (Exception t) {
throw new MojoFailureException(
"Exception during analysing feature " + f.getId().toMvnId() + " : " + t.getMessage(),
t);
}
}
} catch (IOException e) {
throw new MojoExecutionException(
"A fatal error occurred while setting up the analyzer, see error cause:", e);
} finally {
getLog().debug("Features analysis complete");
}
}
if (hasErrors) {
if ( failOnAnalyserErrors ) {
throw new MojoFailureException(
"One or more feature analyser(s) detected feature error(s), please read the plugin log for more details");
}
getLog().warn("Errors found during analyser run, but this plugin is configured to ignore errors and continue the build!");
}
}