diff --git a/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateFeaturesMojo.java b/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateFeaturesMojo.java index 38191e6..17ef11a 100644 --- a/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateFeaturesMojo.java +++ b/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateFeaturesMojo.java @@ -351,11 +349,13 @@ public class ValidateFeaturesMojo extends MojoSupport { */ private void analyzeExports(Repository repository) throws Exception { for (Feature feature : repository.getFeatures()) { + info(" scanning feature %s for exports", feature.getName()); Set exports = new HashSet(); for (String bundle : getBundleLocations(feature)) { exports.addAll(getExports(getManifest(bundle, bundles.get(bundle)))); } - info(" scanning feature %s for exports", feature.getName()); + // add the dependency feature exports + exports.addAll(getDependencyFeatureExports(feature)); featureExports.put(feature.getName(), exports); } } @@ -406,6 +406,27 @@ public class ValidateFeaturesMojo extends MojoSupport { } } + private Set getDependencyFeatureExports(Feature feature) throws Exception { + Set exports = new HashSet(); + + for (Feature dependency : feature.getDependencies()) { + if (featureExports.containsKey(dependency.getName())) { + exports.addAll(featureExports.get(dependency.getName())); + } else { + validateImportsExports(dependency); + exports.addAll(featureExports.get(dependency.getName())); + } + exports.addAll(getDependencyFeatureExports(dependency)); + } + + // add the export of the feature + for (String bundle : getBundleLocations(feature)) { + Manifest meta = manifests.get(bundles.get(bundle)); + exports.addAll(getExports(meta)); + } + return exports; + } + /* * Validate if all imports for a feature are being matched with exports */ @@ -413,12 +434,13 @@ public class ValidateFeaturesMojo extends MojoSupport { Map imports = new HashMap(); Set exports = new HashSet(); for (Feature dependency : feature.getDependencies()) { - if (featureExports.containsKey(dependency.getName())) { - exports.addAll(featureExports.get(dependency.getName())); - } else { + if (!featureExports.containsKey(dependency.getName())) { validateImportsExports(features.get(dependency.getName(), dependency.getVersion())); } } + // add the exports for dependency feature + exports.addAll(getDependencyFeatureExports(feature)); + for (String bundle : getBundleLocations(feature)) { Manifest meta = manifests.get(bundles.get(bundle)); exports.addAll(getExports(meta));