From d357a5846a24c3a12a07075c0d7a1d5900151b92 Mon Sep 17 00:00:00 2001 From: gjoranv Date: Fri, 30 Jun 2023 21:18:06 +0200 Subject: Retrive provided artifacts from Class-Path instead of custom header - Move generic jar file processing to util/JarFiles --- .../yahoo/container/plugin/bundle/AnalyzeBundle.java | 18 ++---------------- .../plugin/mojo/GenerateOsgiManifestMojo.java | 11 ++--------- .../java/com/yahoo/container/plugin/util/JarFiles.java | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+), 25 deletions(-) (limited to 'bundle-plugin') diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/bundle/AnalyzeBundle.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/bundle/AnalyzeBundle.java index 5da0b161a0a..df48b56967e 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/bundle/AnalyzeBundle.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/bundle/AnalyzeBundle.java @@ -4,7 +4,6 @@ package com.yahoo.container.plugin.bundle; import com.yahoo.container.plugin.osgi.ExportPackageParser; import com.yahoo.container.plugin.osgi.ExportPackages.Export; import com.yahoo.container.plugin.util.JarFiles; -import com.yahoo.container.plugin.util.ProvidedArtifact; import java.io.File; import java.util.ArrayList; @@ -15,6 +14,8 @@ import java.util.List; import java.util.Optional; import java.util.jar.Manifest; +import static com.yahoo.container.plugin.util.JarFiles.getMainAttributeValue; + /** * Static utilities for analyzing jar files. * @@ -60,17 +61,6 @@ public class AnalyzeBundle { .orElseGet(ArrayList::new); } - public static List providedArtifacts(File jarFile) { - var manifest = getOsgiManifest(jarFile); - if (manifest == null) return Collections.emptyList(); - - return getMainAttributeValue(manifest, "X-JDisc-Provided-Artifact") - .map(s -> Arrays.stream(s.split(",")) - .map(ProvidedArtifact::fromStringValue) - .toList()) - .orElse(Collections.emptyList()); - } - private static Manifest getOsgiManifest(File jarFile) { Optional jarManifest = JarFiles.getManifest(jarFile); if (jarManifest.isPresent()) { @@ -92,10 +82,6 @@ public class AnalyzeBundle { .orElseGet(ArrayList::new); } - private static Optional getMainAttributeValue(Manifest manifest, String attributeName) { - return Optional.ofNullable(manifest.getMainAttributes().getValue(attributeName)); - } - private static boolean isOsgiManifest(Manifest mf) { return getBundleSymbolicName(mf).isPresent(); } diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java index a7276a7c7ed..b9025d8fb65 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java @@ -29,13 +29,13 @@ import java.util.stream.Stream; import static com.yahoo.container.plugin.bundle.AnalyzeBundle.exportedPackagesAggregated; import static com.yahoo.container.plugin.bundle.AnalyzeBundle.nonPublicApiPackagesAggregated; -import static com.yahoo.container.plugin.bundle.AnalyzeBundle.providedArtifacts; import static com.yahoo.container.plugin.classanalysis.Packages.disallowedImports; import static com.yahoo.container.plugin.osgi.ExportPackages.exportsByPackageName; import static com.yahoo.container.plugin.osgi.ImportPackages.calculateImports; import static com.yahoo.container.plugin.util.Artifacts.VESPA_GROUP_ID; import static com.yahoo.container.plugin.util.Artifacts.getVespaArtifact; import static com.yahoo.container.plugin.util.Files.allDescendantFiles; +import static com.yahoo.container.plugin.util.JarFiles.providedArtifactsFromClassPath; /** @@ -125,7 +125,7 @@ public class GenerateOsgiManifestMojo extends AbstractGenerateOsgiManifestMojo { // Having our wanted artifact as provided guarantees that log output does not contain its exported packages logMissingPackages(exportedPackagesFromProvidedDeps, projectPackages, compileJarsPackages, includedPackages); - logProvidedArtifactsIncluded(artifactsToInclude, providedArtifacts(wantedProvidedArtifact.get().getFile())); + logProvidedArtifactsIncluded(artifactsToInclude, providedArtifactsFromClassPath(wantedProvidedArtifact.get().getFile())); } else if (! suppressWarningMissingImportPackages && jdisc_core.isEmpty()) { // TODO: Remove jdisc_core clause above and instead add suppressWarning to necessary vespa modules. warnOrThrow(("This project does not have '%s' as provided dependency, so the generated 'Import-Package' " + @@ -178,13 +178,6 @@ public class GenerateOsgiManifestMojo extends AbstractGenerateOsgiManifestMojo { addIfNotEmpty(manifestContent, "X-JDisc-PublicApi-Package", publicApi(includedPackages)); addIfNotEmpty(manifestContent, "X-JDisc-Non-PublicApi-Export-Package", nonPublicApi(includedPackages)); - - if (effectiveBundleType() == BundleType.CORE) { - addIfNotEmpty(manifestContent, "X-JDisc-Provided-Artifact", providedJarArtifacts.stream() - .map(ProvidedArtifact::new) - .map(ProvidedArtifact::stringValue) - .collect(Collectors.joining(","))); - } } private void addManifestPropertiesForUserBundles(Map manifestContent, diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/JarFiles.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/JarFiles.java index 72d2adae13e..ade8a4984e8 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/JarFiles.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/JarFiles.java @@ -3,6 +3,9 @@ package com.yahoo.container.plugin.util; import java.io.File; import java.io.InputStream; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; import java.util.Optional; import java.util.jar.JarFile; import java.util.jar.Manifest; @@ -14,6 +17,17 @@ import java.util.zip.ZipFile; * @author ollivir */ public class JarFiles { + + public static List providedArtifactsFromClassPath(File jarFile) { + return getManifest(jarFile).map(mf -> getMainAttributeValue(mf, "Class-Path") + .map(s -> Arrays.stream(s.split(" ")) + .map(ProvidedArtifact::fromStringValue) + .toList()) + .orElse(Collections.emptyList())) + .orElse(Collections.emptyList()); + + } + public static T withJarFile(File file, ThrowingFunction action) { try (JarFile jar = new JarFile(file)) { return action.apply(jar); @@ -30,6 +44,10 @@ public class JarFiles { } } + public static Optional getMainAttributeValue(Manifest manifest, String attributeName) { + return Optional.ofNullable(manifest.getMainAttributes().getValue(attributeName)); + } + public static Optional getManifest(File jarFile) { return withJarFile(jarFile, jar -> Optional.ofNullable(jar.getManifest())); } -- cgit v1.2.3