X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=src%2Forg%2Fargeo%2Fbuild%2FRepackage.java;h=d67a6759ee0f812e7d3551b62c8573a7ea911ca7;hb=064a618a071f7f4105b17a571dc58a4f555fdc6d;hp=db323279257077b0a0f11eb718f51b71931758eb;hpb=47b3a4686b9623a14023702834def98824e3df81;p=cc0%2Fargeo-build.git diff --git a/src/org/argeo/build/Repackage.java b/src/org/argeo/build/Repackage.java index db32327..d67a675 100644 --- a/src/org/argeo/build/Repackage.java +++ b/src/org/argeo/build/Repackage.java @@ -40,6 +40,7 @@ import java.nio.file.Path; 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; @@ -122,22 +123,22 @@ public class Repackage { 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> mirrors = new HashMap>(); + final Map> mirrors = new HashMap>(); /** Whether sources should be packaged separately */ final boolean sourceBundles; @@ -244,6 +245,22 @@ public class Repackage { 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); @@ -413,6 +430,10 @@ public class Repackage { 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"); @@ -522,14 +543,13 @@ public class Repackage { /** Generate MANIFEST using BND. */ Path processBndJar(Path downloaded, Path targetCategoryBase, Properties fileProps, M2Artifact artifact, A2Origin origin) { - try { Map 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; @@ -1258,6 +1278,11 @@ public class Repackage { * 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.).