You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2012/06/19 14:41:17 UTC

svn commit: r1351680 - /karaf/branches/karaf-2.2.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateFeaturesMojo.java

Author: jbonofre
Date: Tue Jun 19 12:41:16 2012
New Revision: 1351680

URL: http://svn.apache.org/viewvc?rev=1351680&view=rev
Log:
[KARAF-1564] features plugin now supports to load the exports packages from dependency features

Modified:
    karaf/branches/karaf-2.2.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateFeaturesMojo.java

Modified: karaf/branches/karaf-2.2.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateFeaturesMojo.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateFeaturesMojo.java?rev=1351680&r1=1351679&r2=1351680&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateFeaturesMojo.java (original)
+++ karaf/branches/karaf-2.2.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateFeaturesMojo.java Tue Jun 19 12:41:16 2012
@@ -17,25 +17,12 @@
  */
 package org.apache.karaf.tooling.features;
 
-import static org.apache.karaf.tooling.features.ManifestUtils.getExports;
-import static org.apache.karaf.tooling.features.ManifestUtils.getMandatoryImports;
-import static org.apache.karaf.tooling.features.ManifestUtils.matches;
-
-import java.io.*;
-import java.net.URI;
-import java.net.URL;
-import java.util.*;
-import java.util.jar.JarInputStream;
-import java.util.jar.Manifest;
-import java.util.zip.ZipException;
-import java.util.zip.ZipFile;
-
+import org.apache.felix.utils.manifest.Clause;
 import org.apache.karaf.features.BundleInfo;
 import org.apache.karaf.features.Feature;
 import org.apache.karaf.features.Repository;
 import org.apache.karaf.features.internal.FeatureValidationUtil;
 import org.apache.karaf.features.internal.RepositoryImpl;
-import org.apache.felix.utils.manifest.Clause;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.DefaultArtifactRepository;
@@ -50,6 +37,17 @@ import org.apache.maven.shared.dependenc
 import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
 import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
 
+import java.io.*;
+import java.net.URI;
+import java.net.URL;
+import java.util.*;
+import java.util.jar.JarInputStream;
+import java.util.jar.Manifest;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+
+import static org.apache.karaf.tooling.features.ManifestUtils.*;
+
 /**
  * Validates a features XML file
  *
@@ -288,11 +286,11 @@ public class ValidateFeaturesMojo extend
     private void readProvidedBundles() throws Exception {
         DependencyNode tree = dependencyTreeBuilder.buildDependencyTree(project, localRepo, factory, artifactMetadataSource, new ArtifactFilter() {
 
-                    public boolean include(Artifact artifact) {
-                        return true;
-                    }
+            public boolean include(Artifact artifact) {
+                return true;
+            }
 
-                }, collector);
+        }, collector);
         tree.accept(new DependencyNodeVisitor() {
             public boolean endVisit(DependencyNode node) {
                 // we want the next sibling too
@@ -351,11 +349,13 @@ public class ValidateFeaturesMojo extend
      */
     private void analyzeExports(Repository repository) throws Exception {
         for (Feature feature : repository.getFeatures()) {
+            info("    scanning feature %s for exports", feature.getName());
             Set<Clause> exports = new HashSet<Clause>();
             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 extend
         }
     }
 
+    private Set<Clause> getDependencyFeatureExports(Feature feature) throws Exception {
+        Set<Clause> exports = new HashSet<Clause>();
+
+        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 extend
         Map<Clause, String> imports = new HashMap<Clause, String>();
         Set<Clause> exports = new HashSet<Clause>();
         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));