Index: tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/AddFeaturesToRepoMojo.java =================================================================== --- tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/AddFeaturesToRepoMojo.java (revision 1057800) +++ tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/AddFeaturesToRepoMojo.java (working copy) @@ -85,6 +85,11 @@ */ private boolean failOnArtifactResolutionError = false; + /** + * @parameter + */ + private boolean addTransitiveFeatures = true; + public void execute() throws MojoExecutionException, MojoFailureException { try { Map featuresMap = new HashMap(); @@ -94,12 +99,23 @@ featuresMap.put(f.getName(), f); } } + Set featuresBundles = new HashSet(); Set transitiveFeatures = new HashSet(); - addFeatures(features, transitiveFeatures, featuresMap); Set bundles = new HashSet(); - for (String feature : transitiveFeatures) { - bundles.addAll(featuresMap.get(feature).getBundles()); + addFeatures(features, featuresBundles, transitiveFeatures, featuresMap); + + // add the bundles of the configured features to the bundles list + bundles.addAll(featuresBundles); + + // if transitive features are enabled we add the contents of those + // features to the bundles list + if (this.addTransitiveFeatures) { + for (String feature : transitiveFeatures) { + getLog().info("Adding contents of transitive feature: " + feature); + bundles.addAll(featuresMap.get(feature).getBundles()); + } } + getLog().info("Base repo: " + localRepo.getUrl()); for (String bundle : bundles) { // get rid of of possible line-breaks KARAF-313 @@ -184,14 +200,22 @@ } } - private void addFeatures(List features, Set transitiveFeatures, Map featuresMap) { + private void addFeatures(List features, Set featuresBundles, Set transitiveFeatures, Map featuresMap) { for (String feature : features) { Feature f = featuresMap.get(feature); if (f == null) { throw new IllegalArgumentException("Unable to find the feature '" + feature + "'"); } - transitiveFeatures.add(feature); - addFeatures(f.getDependencies(), transitiveFeatures, featuresMap); + // only add the feature to transitives if it is not + // listed in the features list defined by the config + if (!this.features.contains(feature)) { + transitiveFeatures.add(feature); + } else { + // add the bundles of the feature to the bundle set + getLog().info("Adding contents for feature: " + feature); + featuresBundles.addAll(featuresMap.get(feature).getBundles()); + } + addFeatures(f.getDependencies(), featuresBundles, transitiveFeatures, featuresMap); } }