in src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java [560:627]
protected Model readLocalModel(
final MavenProject project,
final String inlinedModel,
final File modelDirectory,
final String pattern,
final Logger logger)
throws MavenExecutionException, IOException {
final Pattern p = Pattern.compile(pattern);
final List<String> candidates = new ArrayList<>();
if ( modelDirectory != null && modelDirectory.exists() ) {
for(final File f : modelDirectory.listFiles() ) {
if ( f.isFile() && !f.getName().startsWith(".") ) {
if ( p.matcher(f.getName()).matches() ) {
candidates.add(f.getName());
}
}
}
Collections.sort(candidates);
}
if ( candidates.size() == 0 && (inlinedModel == null || inlinedModel.trim().length() == 0) ) {
throw new MavenExecutionException("No model files found in " + modelDirectory + ", and no model inlined in POM.", (File)null);
}
final Model result = new Model();
if ( inlinedModel != null ) {
logger.debug("Reading inlined model from project " + project.getId());
try {
final Reader reader = new StringReader(inlinedModel);
try {
final Model current = ModelReader.read(reader, "pom");
final Map<Traceable, String> errors = ModelUtility.validate(current);
if (errors != null ) {
throw new MavenExecutionException("Invalid inlined model : " + errors, (File)null);
}
MergeUtility.merge(result, current, new MergeUtility.MergeOptions().setHandleRemoveRunMode(false));
} finally {
IOUtils.closeQuietly(reader);
}
} catch ( final IOException io) {
throw new MavenExecutionException("Unable to read inlined model", io);
}
}
for(final String name : candidates) {
logger.debug("Reading model " + name + " in project " + project.getId());
try {
final File f = new File(modelDirectory, name);
final FileReader reader = new FileReader(f);
try {
final Model current = ModelReader.read(reader, f.getAbsolutePath());
final Map<Traceable, String> errors = ModelUtility.validate(current);
if (errors != null ) {
throw new MavenExecutionException("Invalid model at " + name + " : " + errors, (File)null);
}
MergeUtility.merge(result, current, new MergeUtility.MergeOptions().setHandleRemoveRunMode(false));
} finally {
IOUtils.closeQuietly(reader);
}
} catch ( final IOException io) {
throw new MavenExecutionException("Unable to read model at " + name, io);
}
}
final Map<Traceable, String> errors = ModelUtility.validate(result);
if (errors != null ) {
throw new MavenExecutionException("Invalid assembled model : " + errors, (File)null);
}
return postProcessReadModel(result);
}