X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=src%2Forg%2Fargeo%2Fbuild%2FRepackage.java;h=02158ad147231f3a5e7e552d8549e2c31416e3c2;hb=c5ce5217b5433d7470628c1ccb90141a028d3378;hp=0daf3c401add6e94ed9c3a50c59528a1008900d0;hpb=401cd73c5f568ce0eb2fb3b7b1346f4396fd7a25;p=cc0%2Fargeo-build.git diff --git a/src/org/argeo/build/Repackage.java b/src/org/argeo/build/Repackage.java index 0daf3c4..02158ad 100644 --- a/src/org/argeo/build/Repackage.java +++ b/src/org/argeo/build/Repackage.java @@ -9,7 +9,7 @@ import static java.nio.file.FileVisitResult.CONTINUE; import static java.nio.file.StandardOpenOption.APPEND; import static java.nio.file.StandardOpenOption.CREATE; import static java.util.jar.Attributes.Name.MANIFEST_VERSION; -import static org.argeo.build.Repackage.ManifestHeader.ARGEO_DO_NOT_MODIFY; +import static org.argeo.build.Repackage.ManifestHeader.ARGEO_ORIGIN_DO_NOT_MODIFY; import static org.argeo.build.Repackage.ManifestHeader.ARGEO_ORIGIN_M2; import static org.argeo.build.Repackage.ManifestHeader.ARGEO_ORIGIN_M2_MERGE; import static org.argeo.build.Repackage.ManifestHeader.ARGEO_ORIGIN_M2_REPO; @@ -23,7 +23,7 @@ import static org.argeo.build.Repackage.ManifestHeader.BUNDLE_VERSION; import static org.argeo.build.Repackage.ManifestHeader.ECLIPSE_SOURCE_BUNDLE; import static org.argeo.build.Repackage.ManifestHeader.EXPORT_PACKAGE; import static org.argeo.build.Repackage.ManifestHeader.IMPORT_PACKAGE; -import static org.argeo.build.Repackage.ManifestHeader.REQUIRE_BUNDLE; +//import static org.argeo.build.Repackage.ManifestHeader.REQUIRE_BUNDLE; import static org.argeo.build.Repackage.ManifestHeader.SPDX_LICENSE_IDENTIFIER; import java.io.BufferedWriter; @@ -149,10 +149,10 @@ public class Repackage { EXPORT_PACKAGE("Export-Package"), // /** OSGi imported packages list. */ IMPORT_PACKAGE("Import-Package"), // - /** OSGi required bundles. */ - REQUIRE_BUNDLE("Require-Bundle"), // - /** OSGi path to embedded jar. */ - BUNDLE_CLASSPATH("Bundle-Classpath"), // +// /** OSGi required bundles. */ +// REQUIRE_BUNDLE("Require-Bundle"), // +// /** OSGi path to embedded jar. */ +// BUNDLE_CLASSPATH("Bundle-Classpath"), // // Java /** Java module name. */ AUTOMATIC_MODULE_NAME("Automatic-Module-Name"), // @@ -181,6 +181,8 @@ public class Repackage { * and Export-Package will be kept untouched. */ ARGEO_ORIGIN_NO_METADATA_GENERATION("Argeo-Origin-NoMetadataGeneration"), // + /** Keep JPMS module-info */ + ARGEO_ORIGIN_KEEP_MODULE_INFO("Argeo-Origin-KeepModuleInfo"), // // /** // * Embed the original jar without modifying it (may be required by some // * proprietary licenses, such as JCR Day License). @@ -190,7 +192,7 @@ public class Repackage { * 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"), // + ARGEO_ORIGIN_DO_NOT_MODIFY("Argeo-Origin-Do-Not-Modify"), // /** * Origin (non-Maven) URI of the component. It may be anything (jar, archive, * etc.). @@ -376,7 +378,7 @@ public class Repackage { Path downloaded = downloadMaven(fileProps, artifact); boolean doNotModify = Boolean - .parseBoolean(fileProps.getOrDefault(ARGEO_DO_NOT_MODIFY.toString(), "false").toString()); + .parseBoolean(fileProps.getOrDefault(ARGEO_ORIGIN_DO_NOT_MODIFY.toString(), "false").toString()); if (doNotModify) { processNotModified(targetCategoryBase, downloaded, fileProps, artifact); return; @@ -470,8 +472,8 @@ public class Repackage { // download Path downloaded = downloadMaven(mergedProps, artifact); - boolean doNotModify = Boolean - .parseBoolean(mergedProps.getOrDefault(ARGEO_DO_NOT_MODIFY.toString(), "false").toString()); + boolean doNotModify = Boolean.parseBoolean( + mergedProps.getOrDefault(ARGEO_ORIGIN_DO_NOT_MODIFY.toString(), "false").toString()); if (doNotModify) { processNotModified(targetCategoryBase, downloaded, mergedProps, artifact); } else { @@ -1018,8 +1020,10 @@ public class Repackage { /** Normalise a single (that is, non-merged) bundle. */ Path processBundleJar(Path file, Path targetBase, Map entries, A2Origin origin) throws IOException { // boolean embed = Boolean.parseBoolean(entries.getOrDefault(ARGEO_ORIGIN_EMBED.toString(), "false").toString()); - boolean doNotModify = Boolean - .parseBoolean(entries.getOrDefault(ManifestHeader.ARGEO_DO_NOT_MODIFY.toString(), "false").toString()); + boolean doNotModify = Boolean.parseBoolean( + entries.getOrDefault(ManifestHeader.ARGEO_ORIGIN_DO_NOT_MODIFY.toString(), "false").toString()); + boolean keepModuleInfo = Boolean.parseBoolean( + entries.getOrDefault(ManifestHeader.ARGEO_ORIGIN_KEEP_MODULE_INFO.toString(), "false").toString()); NameVersion nameVersion; Path bundleDir; // singleton @@ -1030,10 +1034,6 @@ public class Repackage { sourceManifest = jarIn.getManifest(); if (sourceManifest == null) logger.log(WARNING, file + " has no manifest"); - else { - if (!doNotModify) - sourceManifest.getMainAttributes().remove(REQUIRE_BUNDLE.toString()); - } manifest = sourceManifest != null ? new Manifest(sourceManifest) : new Manifest(); String rawSourceSymbolicName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME.toString()); @@ -1082,7 +1082,7 @@ public class Repackage { } // force Java 9 module name - entries.put(ManifestHeader.AUTOMATIC_MODULE_NAME.toString(), nameVersion.getName()); + entries.put(AUTOMATIC_MODULE_NAME.toString(), nameVersion.getName()); boolean isNative = false; String os = null; @@ -1106,8 +1106,12 @@ public class Repackage { continue entries; } if (entry.getName().endsWith("module-info.class")) { // skip Java 9 module info - origin.deleted.add("Java module information (module-info.class)"); - continue entries; + if (keepModuleInfo) { + entries.remove(AUTOMATIC_MODULE_NAME.toString()); + } else { + origin.deleted.add("Java module information (module-info.class)"); + continue entries; + } } if (entry.getName().startsWith("META-INF/versions/")) { // skip multi-version origin.deleted.add("additional Java versions (META-INF/versions)"); @@ -1223,7 +1227,11 @@ public class Repackage { for (Iterator> manifestEntries = manifest.getMainAttributes().entrySet() .iterator(); manifestEntries.hasNext();) { Map.Entry manifestEntry = manifestEntries.next(); - switch (manifestEntry.getKey().toString()) { + String key = manifestEntry.getKey().toString(); + // TODO make it more generic +// if (key.equals(REQUIRE_BUNDLE.toString()) && nameVersion.getName().equals("com.sun.jna.platform")) +// manifestEntries.remove(); + switch (key) { case "Archiver-Version": case "Build-By": case "Created-By":