aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bundle-plugin-test/integration-test/src/test/java/com/yahoo/container/plugin/NonPublicApiDetectionTest.java9
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java14
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);