in src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojo.java [1011:1092]
private Map<String, File> getEmbeddeds() throws MojoFailureException, ConfigurationException {
Map<String, File> fileMap = new HashMap<>();
for (Embedded emb : embeddeds) {
final Collection<Artifact> artifacts = emb.getMatchingArtifacts(project);
if (artifacts.isEmpty()) {
if (failOnMissingEmbed) {
throw new MojoFailureException("Embedded artifact specified " + emb + ", but no matching dependency artifact found. Add the missing dependency or fix the embed definition.");
} else {
getLog().warn("No matching artifacts for " + emb);
continue;
}
}
if (emb.getDestFileName() != null && artifacts.size() > 1) {
getLog().warn("destFileName defined but several artifacts match for " + emb);
}
String targetPath = emb.getTarget();
if (targetPath == null) {
targetPath = embeddedTarget;
if (targetPath == null) {
final String loc = (prefix.length() == 0)
? "apps/"
: prefix;
targetPath = loc + "bundles/install/";
getLog().info("No target path set on " + emb + "; assuming default " + targetPath);
}
}
targetPath = makeAbsolutePath(targetPath);
targetPath = Constants.ROOT_DIR + targetPath;
targetPath = FileUtils.normalize(targetPath);
if (!targetPath.endsWith("/")) {
targetPath += "/";
}
getLog().info("Embedding --- " + emb + " ---");
for (final Artifact artifact : artifacts) {
final File source = artifact.getFile();
String destFileName = emb.getDestFileName();
// todo: add support for patterns
if (destFileName == null) {
// If the <destFileName> param is not specified...
if (!source.isDirectory()) {
// If the artifact file is not a directory, defer to File.getName().
destFileName = source.getName();
} else {
// If the dependency file is a directory, the final artifact file has not yet been packaged.
// Construct a fallback file name from the artifact coordinates.
final String layoutBaseName = Text.getName(embedArtifactLayout.pathOf(artifact));
// Look for a peer module in the session that the artifact is attached to.
final MavenProject peerModule = findModuleForArtifact(artifact);
if (peerModule != null) {
// determine the finalName of the artifact, which is ${artifactId}-${version} by default.
final Artifact attached = peerModule.getArtifact();
final String defaultFinalName = attached.getArtifactId() + "-" + attached.getVersion();
final String peerFinalName = peerModule.getBuild().getFinalName();
if (peerFinalName != null) {
// remove the default finalName from the beginning of the layout basename, and
// prepend the specified finalName to create the destFileName.
destFileName = peerFinalName + layoutBaseName.substring(defaultFinalName.length());
}
}
// If destFileName is still null, fallback to layoutBaseName.
if (destFileName == null) {
destFileName = layoutBaseName;
}
}
}
final String targetPathName = targetPath + destFileName;
final String targetNodePathName = targetPathName.substring(Constants.ROOT_DIR.length());
getLog().info(String.format("Embedding %s (from %s) -> %s", artifact.getId(), source.getAbsolutePath(), targetPathName));
fileMap.put(targetPathName, source);
if (emb.isFilter()) {
addEmbeddedFileToFilter(targetNodePathName, emb.isAllVersionsFilter());
}
}
}
return fileMap;
}