diff options
2 files changed, 15 insertions, 8 deletions
diff --git a/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/NonPublicApiDetectionTest.java b/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/NonPublicApiDetectionTest.java index ad6a2798376..79b48ec5a03 100644 --- a/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/NonPublicApiDetectionTest.java +++ b/bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/NonPublicApiDetectionTest.java @@ -12,6 +12,7 @@ import java.util.stream.Collectors; import static com.yahoo.container.plugin.BundleTest.findBundleJar; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -36,13 +37,15 @@ public class NonPublicApiDetectionTest { } @Test - void usage_of_non_publicApi_packages_is_detected() { + void direct_usage_of_non_publicApi_packages_is_detected() { var nonPublicApiAttribute = mainAttributes.getValue("X-JDisc-Non-PublicApi-Import-Package"); assertNotNull(nonPublicApiAttribute); var usedNonPublicApi = Arrays.stream(nonPublicApiAttribute.split(",")).collect(Collectors.toSet()); - assertEquals(3, usedNonPublicApi.size()); - assertTrue(usedNonPublicApi.contains("ai.vespa.internal")); + // Package 'ai.vespa.internal' is only used indirectly by the compile scoped dependency, and must not be included. + assertFalse(usedNonPublicApi.contains("ai.vespa.internal")); + + assertEquals(2, usedNonPublicApi.size()); assertTrue(usedNonPublicApi.contains("ai.vespa.lib.non_public")); assertTrue(usedNonPublicApi.contains("com.yahoo.lib.non_public")); } 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 dcca60e1be8..c86d5bda800 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 @@ -134,14 +134,18 @@ public class GenerateOsgiManifestMojo extends AbstractGenerateOsgiManifestMojo { logOverlappingPackages(projectPackages, exportedPackagesFromProvidedDeps); - Map<String, Import> calculatedImports = calculateImports(includedPackages.referencedPackages(), - includedPackages.definedPackages(), - exportsByPackageName(exportedPackagesFromProvidedJars)); + Map<String, Export> exportedPackagesByName = exportsByPackageName(exportedPackagesFromProvidedJars); - List<String> nonPublicApiUsed = disallowedImports(calculatedImports, nonPublicApiPackagesFromProvidedJars); + Map<String, Import> importsForProjectPackages = calculateImports(projectPackages.referencedPackages(), + includedPackages.definedPackages(), + exportedPackagesByName); + List<String> nonPublicApiUsed = disallowedImports(importsForProjectPackages, nonPublicApiPackagesFromProvidedJars); logNonPublicApiUsage(nonPublicApiUsed); - Map<String, String> manifestContent = generateManifestContent(artifactsToInclude, calculatedImports, includedPackages); + Map<String, Import> importsForIncludedPackages = calculateImports(includedPackages.referencedPackages(), + includedPackages.definedPackages(), + exportedPackagesByName); + Map<String, String> manifestContent = generateManifestContent(artifactsToInclude, importsForIncludedPackages, includedPackages); addAdditionalManifestProperties(manifestContent); addManifestPropertiesForInternalAndCoreBundles(manifestContent, includedPackages, providedJarArtifacts); addManifestPropertiesForUserBundles(manifestContent, providedJarArtifacts, nonPublicApiUsed); |