in src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojo.java [1075:1148]
private Map<String, File> getSubPackages() throws MojoFailureException, ConfigurationException {
final String propsRelPath = Constants.META_DIR + "/" + Constants.PROPERTIES_XML;
Map<String, File> fileMap = new HashMap<>();
for (SubPackage pack : subPackages) {
final Collection<Artifact> artifacts = pack.getMatchingArtifacts(project);
if (artifacts.isEmpty()) {
getLog().warn("No matching artifacts for sub package " + pack);
continue;
}
// get the package path
getLog().info("Embedding subpackage --- " + pack + " ---");
for (Artifact artifact : artifacts) {
final Properties props = new Properties();
final File source = artifact.getFile();
if (source.isDirectory()) {
File otherWorkDirectory = null;
final MavenProject otherProject = findModuleForArtifact(artifact);
if (otherProject != null) {
final PluginDescriptor pluginDescriptor = (PluginDescriptor) this.getPluginContext().get("pluginDescriptor");
if (pluginDescriptor != null) {
Map<String, Object> otherContext = this.session.getPluginContext(pluginDescriptor, otherProject);
otherWorkDirectory = getArtifactWorkDirectoryLookup(otherContext).get(getModuleArtifactKey(artifact));
}
}
// if not identifiable as a filevault content-package dependency, assume a generic archive layout.
if (otherWorkDirectory == null) {
otherWorkDirectory = source; // points to "target/classes"
}
File propsXml = new File(otherWorkDirectory, propsRelPath);
if (!propsXml.exists()) {
// fallback to work dir (assuming the same folder name)
propsXml = new File(otherWorkDirectory.getParent(), getWorkDirectory(false).getName() + "/" + propsRelPath);
}
try (InputStream input = new FileInputStream(propsXml)) {
props.loadFromXML(input);
} catch (IOException e) {
throw new MojoFailureException("Could not read META-INF/vault/properties.xml from directory '" +
otherWorkDirectory + "' to extract metadata: " + e.getMessage(), e);
}
} else {
// load properties
try (ZipFile zip = new ZipFile(source)) {
ZipEntry e = zip.getEntry(propsRelPath);
if (e == null) {
throw new IOException("Package does not contain 'META-INF/vault/properties.xml'");
}
try (InputStream in = zip.getInputStream(e)) {
props.loadFromXML(in);
}
} catch (IOException e) {
throw new MojoFailureException("Could not open subpackage '" + source + "' to extract metadata: " + e.getMessage(), e);
}
}
PackageId pid = new PackageId(
props.getProperty(PackageProperties.NAME_GROUP),
props.getProperty(PackageProperties.NAME_NAME),
props.getProperty(PackageProperties.NAME_VERSION)
);
final String targetNodePathName = pid.getInstallationPath() + ".zip";
final String targetPathName = "jcr_root" + targetNodePathName;
getLog().info(String.format("Embedding %s (from %s) -> %s", artifact.getId(), source.getAbsolutePath(), targetPathName));
fileMap.put(targetPathName, source);
if (pack.isFilter()) {
addEmbeddedFileToFilter(targetNodePathName, pack.isAllVersionsFilter());
}
}
}
return fileMap;
}