in src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojo.java [519:601]
public void execute() throws MojoExecutionException, MojoFailureException {
if (buildContext.isIncremental()) {
getLog().debug("Incremental build");
// only execute in case of changes towards the filter.xml as the generated one contains a merge
if (filterSource != null) {
if (buildContext.hasDelta(filterSource)) {
getLog().debug("Detecting a change on " + getProjectRelativeFilePath(filterSource) + " therefore not cancelling build");
} else {
getLog().debug(getProjectRelativeFilePath(filterSource) + " unchanged therefore cancelling build");
return;
}
} else {
getLog().debug("No file change would be relevant therefore cancelling build");
return;
}
}
if (!failOnEmptyFilter) {
getLog().warn("The parameter 'failOnEmptyFilter' is no longer supported and ignored. Every package must have a non-empty filter!");
}
final File vaultDir = getGeneratedVaultDir(true);
vaultDir.mkdirs();
// JCRVLT-331 share work directory to expose vault metadata between process-classes and package phases for
// multi-module builds.
getArtifactWorkDirectoryLookup(getPluginContext())
.put(getModuleArtifactKey(project.getArtifact()), getWorkDirectory(true));
try {
// find the meta-inf source directory
File metaInfDirectory = getMetaInfVaultSourceDirectory();
// generate the filter.xml
String sourceFilters = computeFilters(metaInfDirectory);
computeImportPackage();
// this must happen before the filter rules are extended
// but after filters have been consolidated
if (packageType == null) {
packageType = computePackageType();
}
// calculate the embeddeds and subpackages
Map<String, File> embeddedFiles = getEmbeddeds();
embeddedFiles.putAll(getSubPackages());
// embed install hooks
if (installHooks != null && !installHooks.isEmpty()) {
for (ArtifactCoordinates installHook : installHooks) {
File installHookFile = resolveArtifact(installHook.toArtifact());
embeddedFiles.put(Constants.META_DIR + "/" + Constants.HOOKS_DIR + "/" + installHookFile.getName(), installHookFile);
getLog().info("Embed install hook " + installHookFile);
}
}
setEmbeddedFilesMap(embeddedFiles);
String dependenciesString = computeDependencies();
String dependenciesLocations = computeDependenciesLocations();
// generate properties.xml
final Properties vaultProperties = computeProperties(dependenciesString, dependenciesLocations);
try (FileOutputStream fos = new FileOutputStream(new File(vaultDir, Constants.PROPERTIES_XML))) {
vaultProperties.storeToXML(fos, project.getName());
}
writeFilters(sourceFilters);
copyFile("/vault/config.xml", new File(vaultDir, Constants.CONFIG_XML));
copyFile("/vault/settings.xml", new File(vaultDir, Constants.SETTINGS_XML));
File packageDefinitionXml = new File(vaultDir, Constants.PACKAGE_DEFINITION_XML);
if (!packageDefinitionXml.getParentFile().exists()) {
packageDefinitionXml.getParentFile().mkdir();
}
try (OutputStream output = new FileOutputStream( packageDefinitionXml )) {
writePackageDefinition(output);
}
if (thumbnailImage != null && thumbnailImage.exists()) {
FileUtils.copyFile(thumbnailImage, new File(packageDefinitionXml.getParentFile(), "thumbnail.png"));
}
writeManifest(getGeneratedManifestFile(true), dependenciesString, dependenciesLocations, vaultProperties);
} catch (IOException | ManifestException | DependencyResolutionRequiredException | ConfigurationException | NamespaceException | XMLStreamException e) {
throw new MojoExecutionException(e.toString(), e);
}
buildContext.refresh(vaultDir);
}