diff options
4 files changed, 21 insertions, 2 deletions
diff --git a/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/BundleTest.java b/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/BundleTest.java index 2e3a3204ef5..e06ce45a5f5 100644 --- a/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/BundleTest.java +++ b/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/BundleTest.java @@ -103,6 +103,11 @@ public class BundleTest { assertTrue(exportPackage.contains("com.yahoo.test;version=1.2.3.RELEASE")); } + @Test + void require_that_manifest_contains_public_api() { + assertEquals("com.yahoo.test", mainAttributes.getValue("X-JDisc-PublicApi-Package")); + } + // TODO: use another jar than jrt, which now pulls in a lot of dependencies that pollute the manifest of the // generated bundle. (It's compile scoped in pom.xml to be added to the bundle-cp.) @Test diff --git a/bundle-plugin-test/test-bundles/main/src/main/java/com/yahoo/test/package-info.java b/bundle-plugin-test/test-bundles/main/src/main/java/com/yahoo/test/package-info.java index 852a8387cfe..0169574fe74 100644 --- a/bundle-plugin-test/test-bundles/main/src/main/java/com/yahoo/test/package-info.java +++ b/bundle-plugin-test/test-bundles/main/src/main/java/com/yahoo/test/package-info.java @@ -1,6 +1,8 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. @ExportPackage(version = @Version(major = 1, minor = 2, micro = 3, qualifier = "RELEASE")) +@PublicApi package com.yahoo.test; +import com.yahoo.api.annotations.PublicApi; import com.yahoo.osgi.annotation.ExportPackage; import com.yahoo.osgi.annotation.Version; diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/PackageTally.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/PackageTally.java index e2d2b96d194..51fba228b41 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/PackageTally.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/PackageTally.java @@ -42,6 +42,13 @@ public class PackageTally { return ret; } + public Set<String> publicApiPackages() { + return definedPackages.values().stream() + .filter(PackageInfo::isPublicApi) + .map(PackageInfo::name) + .collect(Collectors.toSet()); + } + /** * Returns the set of packages that is referenced from this tally, but not included in the given set of available packages. * 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 f5d3259c537..ac50613bf6f 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 @@ -102,7 +102,7 @@ public class GenerateOsgiManifestMojo extends AbstractGenerateOsgiManifestMojo { Map<String, String> manifestContent = generateManifestContent(artifactSet.getJarArtifactsToInclude(), calculatedImports, includedPackages); - addAdditionalManifestProperties(manifestContent); + addAdditionalManifestProperties(manifestContent, projectPackages); createManifestFile(Paths.get(project.getBuild().getOutputDirectory()), manifestContent); } catch (Exception e) { @@ -110,7 +110,8 @@ public class GenerateOsgiManifestMojo extends AbstractGenerateOsgiManifestMojo { } } - private void addAdditionalManifestProperties(Map<String, String> manifestContent) { + private void addAdditionalManifestProperties(Map<String, String> manifestContent, PackageTally projectPackages) { + addIfNotEmpty(manifestContent, "X-JDisc-PublicApi-Package", publicApi(projectPackages)); addIfNotEmpty(manifestContent, "Bundle-Activator", bundleActivator); addIfNotEmpty(manifestContent, "X-JDisc-Privileged-Activator", jdiscPrivilegedActivator); addIfNotEmpty(manifestContent, "Main-Class", mainClass); @@ -119,6 +120,10 @@ public class GenerateOsgiManifestMojo extends AbstractGenerateOsgiManifestMojo { addIfNotEmpty(manifestContent, "WebInfUrl", webInfUrl); } + private static String publicApi(PackageTally tally) { + return tally.publicApiPackages().stream().sorted().collect(Collectors.joining(",")); + } + private void logDebugPackageSets(List<Export> exportedPackagesFromProvidedJars, PackageTally includedPackages) { if (getLog().isDebugEnabled()) { getLog().debug("Referenced packages = " + includedPackages.referencedPackages()); |