aboutsummaryrefslogtreecommitdiffstats
path: root/bundle-plugin
diff options
context:
space:
mode:
authorgjoranv <gv@yahooinc.com>2023-06-30 21:18:06 +0200
committergjoranv <gv@yahooinc.com>2023-07-03 22:37:54 +0200
commitd357a5846a24c3a12a07075c0d7a1d5900151b92 (patch)
tree3e9be237883eed781d7f520688554155b52c6c34 /bundle-plugin
parent127832a12081c56731f5b669c1a2a0b2bd6568e6 (diff)
Retrive provided artifacts from Class-Path instead of custom header
- Move generic jar file processing to util/JarFiles
Diffstat (limited to 'bundle-plugin')
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/bundle/AnalyzeBundle.java18
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java11
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/util/JarFiles.java18
3 files changed, 22 insertions, 25 deletions
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<ProvidedArtifact> 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<Manifest> jarManifest = JarFiles.getManifest(jarFile);
if (jarManifest.isPresent()) {
@@ -92,10 +82,6 @@ public class AnalyzeBundle {
.orElseGet(ArrayList::new);
}
- private static Optional<String> 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<String, String> 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<ProvidedArtifact> 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> T withJarFile(File file, ThrowingFunction<JarFile, T> action) {
try (JarFile jar = new JarFile(file)) {
return action.apply(jar);
@@ -30,6 +44,10 @@ public class JarFiles {
}
}
+ public static Optional<String> getMainAttributeValue(Manifest manifest, String attributeName) {
+ return Optional.ofNullable(manifest.getMainAttributes().getValue(attributeName));
+ }
+
public static Optional<Manifest> getManifest(File jarFile) {
return withJarFile(jarFile, jar -> Optional.ofNullable(jar.getManifest()));
}