import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
+import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
final static String A2_ORIGIN = "A2-ORIGIN";
/** Directory where to download archives */
- Path originBase;
+ final Path originBase;
/** Directory where to download Maven artifacts */
- Path mavenBase;
+ final Path mavenBase;
/** A2 repository base for binary bundles */
- Path a2Base;
+ final Path a2Base;
/** A2 repository base for source bundles */
- Path a2SrcBase;
+ final Path a2SrcBase;
/** A2 base for native components */
- Path a2LibBase;
+ final Path a2LibBase;
/** Location of the descriptors driving the packaging */
- Path descriptorsBase;
+ final Path descriptorsBase;
/** URIs of archives to download */
- Properties uris = new Properties();
+ final Properties uris = new Properties();
/** Mirrors for archive download. Key is URI prefix, value list of base URLs */
- Map<String, List<String>> mirrors = new HashMap<String, List<String>>();
+ final Map<String, List<String>> mirrors = new HashMap<String, List<String>>();
/** Whether sources should be packaged separately */
final boolean sourceBundles;
URL url = M2ConventionsUtils.mavenRepoUrl(repoStr, artifact);
Path downloaded = downloadMaven(url, artifact);
+ // some proprietary artifacts do not allow any modification
+ // when releasing (with separate sources) we just copy it
+ boolean doNotModify = Boolean.parseBoolean(
+ fileProps.getOrDefault(ManifestConstants.ARGEO_DO_NOT_MODIFY.toString(), "false").toString());
+ if (doNotModify && sourceBundles) {
+ Path unmodifiedTarget = targetCategoryBase.resolve(
+ fileProps.getProperty(BUNDLE_SYMBOLICNAME.toString()) + "." + artifact.getBranch() + ".jar");
+ Files.copy(downloaded, unmodifiedTarget, StandardCopyOption.REPLACE_EXISTING);
+ downloadAndProcessM2Sources(repoStr, artifact,
+ targetCategoryBase.resolve(
+ fileProps.getProperty(BUNDLE_SYMBOLICNAME.toString()) + "." + artifact.getBranch()),
+ false);
+ return;
+ }
+
+ // normal processing
A2Origin origin = new A2Origin();
Path targetBundleDir = processBndJar(downloaded, targetCategoryBase, fileProps, artifact, origin);
origin.deleted.add("cache directory (.cache) from " + artifact);
continue entries;
}
+ if (entry.getName().equals("META-INF/DEPENDENCIES")) {
+ origin.deleted.add("Dependencies (META-INF/DEPENDENCIES) from " + artifact);
+ continue entries;
+ }
if (entry.getName().equals("META-INF/MANIFEST.MF")) {
Path originalManifest = bundleDir.resolve(A2_ORIGIN).resolve(artifact.getGroupId())
.resolve(artifact.getArtifactId()).resolve("MANIFEST.MF");
/** Generate MANIFEST using BND. */
Path processBndJar(Path downloaded, Path targetCategoryBase, Properties fileProps, M2Artifact artifact,
A2Origin origin) {
-
try {
Map<String, String> additionalEntries = new TreeMap<>();
- boolean doNotModify = Boolean.parseBoolean(
+ boolean doNotModifyManifest = Boolean.parseBoolean(
fileProps.getOrDefault(ARGEO_ORIGIN_MANIFEST_NOT_MODIFIED.toString(), "false").toString());
// Note: we always force the symbolic name
- if (doNotModify) {
+ if (doNotModifyManifest) {
fileEntries: for (Object key : fileProps.keySet()) {
if (ARGEO_ORIGIN_M2.toString().equals(key))
continue fileEntries;
Path originalManifest = bundleDir.resolve(A2_ORIGIN).resolve("MANIFEST.MF");
Files.createDirectories(originalManifest.getParent());
try (OutputStream out = Files.newOutputStream(originalManifest)) {
- sourceManifest.write(null);
+ sourceManifest.write(out);
}
origin.added.add("original MANIFEST (" + bundleDir.relativize(originalManifest) + ")");
}
* proprietary licenses, such as JCR Day License).
*/
ARGEO_ORIGIN_EMBED("Argeo-Origin-Embed"), //
+ /**
+ * Do not modify original jar (may be required by some proprietary licenses,
+ * such as JCR Day License).
+ */
+ ARGEO_DO_NOT_MODIFY("Argeo-Origin-Do-Not-Modify"), //
/**
* Origin (non-Maven) URI of the component. It may be anything (jar, archive,
* etc.).