You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2019/06/24 13:59:33 UTC
[sling-slingfeature-maven-plugin] branch master updated: SLING-8530
: Provide more control for attaching features
This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-slingfeature-maven-plugin.git
The following commit(s) were added to refs/heads/master by this push:
new de0f7e3 SLING-8530 : Provide more control for attaching features
de0f7e3 is described below
commit de0f7e365c9c06ea689e13cee8d73d75bafca2f2
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Mon Jun 24 15:58:35 2019 +0200
SLING-8530 : Provide more control for attaching features
---
.../apache/sling/feature/maven/ProjectHelper.java | 56 +++++++++++----------
.../sling/feature/maven/mojos/Aggregate.java | 9 +++-
.../feature/maven/mojos/AggregateFeaturesMojo.java | 4 +-
.../feature/maven/mojos/AttachFeaturesMojo.java | 39 ++++++++++-----
.../maven/mojos/AggregateFeaturesMojoTest.java | 58 +++++++++++-----------
.../maven/mojos/AttachFeaturesMojoTest.java | 11 ++--
6 files changed, 103 insertions(+), 74 deletions(-)
diff --git a/src/main/java/org/apache/sling/feature/maven/ProjectHelper.java b/src/main/java/org/apache/sling/feature/maven/ProjectHelper.java
index c491b0f..901b6d8 100644
--- a/src/main/java/org/apache/sling/feature/maven/ProjectHelper.java
+++ b/src/main/java/org/apache/sling/feature/maven/ProjectHelper.java
@@ -16,6 +16,23 @@
*/
package org.apache.sling.feature.maven;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.stream.Collectors;
+
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DefaultArtifact;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
@@ -34,23 +51,6 @@ import org.apache.sling.feature.io.json.FeatureJSONReader;
import org.apache.sling.feature.io.json.FeatureJSONWriter;
import org.codehaus.plexus.util.xml.Xpp3Dom;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.stream.Collectors;
-
/**
* The project helper contains utility functions and provides access
* to the already read and processed features and test features.
@@ -332,13 +332,14 @@ public abstract class ProjectHelper {
sb.append('[');
}
boolean first = true;
- for(final String key : featureKeys) {
+ for (String key : featureKeys) {
if ( first ) {
first = false;
} else {
sb.append(", ");
}
if ( key.startsWith(AGGREGATE_PREFIX) ) {
+ key = key.substring(0, key.length() - 2);
sb.append("aggregate ");
if (key.length() == AGGREGATE_PREFIX.length()) {
sb.append("main artifact (no classifier)");
@@ -359,8 +360,13 @@ public abstract class ProjectHelper {
return featureKey.startsWith(AGGREGATE_PREFIX);
}
- public static String generateAggregateFeatureKey(final String classifier) {
- return classifier != null ? AGGREGATE_PREFIX.concat(classifier) : AGGREGATE_PREFIX;
+ public static boolean isAttachAggregate(final String featureKey) {
+ return isAggregate(featureKey) && featureKey.endsWith(":T");
+ }
+
+ public static String generateAggregateFeatureKey(final String classifier, final boolean attach) {
+ return (classifier != null ? AGGREGATE_PREFIX.concat(classifier) : AGGREGATE_PREFIX).concat(":")
+ .concat(attach ? "T" : "F");
}
private static final String NULL_KEY = ":";
@@ -380,7 +386,7 @@ public abstract class ProjectHelper {
* @param project The maven project
*/
public static void validateFeatureClassifiers(final MavenProject project) {
- validateFeatureClassifiers(project, false, null);
+ validateFeatureClassifiers(project, false, null, false);
}
/**
@@ -389,8 +395,8 @@ public abstract class ProjectHelper {
* @param additionalClassifier Optional additional classifier
*/
public static void validateFeatureClassifiers(final MavenProject project,
- final String additionalClassifier) {
- validateFeatureClassifiers(project, true, additionalClassifier);
+ final String additionalClassifier, final boolean attachFeature) {
+ validateFeatureClassifiers(project, true, additionalClassifier, attachFeature);
}
/**
@@ -400,7 +406,7 @@ public abstract class ProjectHelper {
* @param additionalClassifier Optional additional classifier
*/
private static void validateFeatureClassifiers(final MavenProject project, final boolean classifierProvided,
- final String additionalClassifier) {
+ final String additionalClassifier, final boolean attachFeature) {
final Map<String, List<String>> classifiers = new HashMap<>();
for(final Map.Entry<String, Feature> entry : getFeatures(project).entrySet()) {
@@ -413,7 +419,7 @@ public abstract class ProjectHelper {
addClassifier(classifiers, entry.getValue().getId().getClassifier(), entry.getKey());
}
if (classifierProvided) {
- final String key = ProjectHelper.generateAggregateFeatureKey(additionalClassifier);
+ final String key = ProjectHelper.generateAggregateFeatureKey(additionalClassifier, attachFeature);
addClassifier(classifiers, additionalClassifier, key);
}
for(final Map.Entry<String, List<String>> entry : classifiers.entrySet()) {
diff --git a/src/main/java/org/apache/sling/feature/maven/mojos/Aggregate.java b/src/main/java/org/apache/sling/feature/maven/mojos/Aggregate.java
index 91c0d47..dbdf75f 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/Aggregate.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/Aggregate.java
@@ -33,6 +33,12 @@ public class Aggregate extends FeatureSelectionConfig {
public String classifier;
/**
+ * If this is set to {@code false} the feature is not added to the project
+ * artifacts.
+ */
+ public boolean attach = true;
+
+ /**
* If this is set to {@code true} the feature is marked as final.
*/
public boolean markAsFinal = false;
@@ -66,12 +72,13 @@ public class Aggregate extends FeatureSelectionConfig {
@Override
public String toString() {
return "Aggregate [selection=" + getSelections() + ", filesExcludes=" + getFilesExcludes()
- + ", classifier=" + classifier
+ + ", classifier=" + classifier + ", attach=" + attach
+ ", markAsFinal=" + markAsFinal + ", markAsComplete=" + markAsComplete + ", title=" + title
+ ", description=" + description + ", vendor=" + vendor + ", artifactsOverrides=" + artifactsOverrides
+ ", variablesOverrides=" + variablesOverrides + ", frameworkPropertiesOverrides=" + frameworkPropertiesOverrides + "]";
}
+ @SuppressWarnings("unchecked")
public List<ArtifactId> getArtifactOverrideRules() {
if (artifactsOverrides == null) {
return Collections.emptyList();
diff --git a/src/main/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesMojo.java b/src/main/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesMojo.java
index f112e8a..e6f83e0 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesMojo.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesMojo.java
@@ -71,7 +71,7 @@ public class AggregateFeaturesMojo extends AbstractIncludingFeatureMojo {
ProjectHelper.checkPreprocessorRun(this.project);
for (final Aggregate aggregate : aggregates) {
// check classifier
- ProjectHelper.validateFeatureClassifiers(this.project, aggregate.classifier);
+ ProjectHelper.validateFeatureClassifiers(this.project, aggregate.classifier, aggregate.attach);
final Map<String, Feature> selection = this.getSelectedFeatures(aggregate);
if (selection.isEmpty()) {
@@ -192,7 +192,7 @@ public class AggregateFeaturesMojo extends AbstractIncludingFeatureMojo {
ProjectHelper.setFeatureInfo(project, result);
// Add feature to map of features
- final String key = ProjectHelper.generateAggregateFeatureKey(aggregate.classifier);
+ final String key = ProjectHelper.generateAggregateFeatureKey(aggregate.classifier, aggregate.attach);
ProjectHelper.getAssembledFeatures(project).put(key, result);
ProjectHelper.getFeatures(this.project).put(key, result);
}
diff --git a/src/main/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojo.java b/src/main/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojo.java
index 2296bda..85040a0 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojo.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojo.java
@@ -21,8 +21,8 @@ import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
+import java.util.Map;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
@@ -46,7 +46,13 @@ import org.apache.sling.feature.maven.ProjectHelper;
)
public class AttachFeaturesMojo extends AbstractFeatureMojo {
/**
- * Attach test features
+ * Attach main features (source)
+ */
+ @Parameter(name = "attachMainFeatures", defaultValue = "true")
+ private boolean attachMainFeatures;
+
+ /**
+ * Attach test features (source)
*/
@Parameter(name = "attachTestFeatures",
defaultValue = "false")
@@ -64,9 +70,9 @@ public class AttachFeaturesMojo extends AbstractFeatureMojo {
@Parameter(name = "referenceFileClassifier")
private String referenceFileClassifier;
- private void attach(final Feature feature,
- final String classifier)
+ private void attach(final Feature feature)
throws MojoExecutionException {
+ final String classifier = feature.getId().getClassifier();
// write the feature
final File outputFile = new File(this.getTmpDir(), classifier == null ? "feature.json" : "feature-" + classifier + ".json");
outputFile.getParentFile().mkdirs();
@@ -92,11 +98,10 @@ public class AttachFeaturesMojo extends AbstractFeatureMojo {
public void execute() throws MojoExecutionException, MojoFailureException {
ProjectHelper.checkPreprocessorRun(this.project);
final List<String> featureUrls = new ArrayList<>();
- this.attachClassifierFeatures(ProjectHelper.getFeatures(this.project).values(), featureUrls);
+ this.attachClassifierFeatures(ProjectHelper.getFeatures(this.project), featureUrls, this.attachMainFeatures);
+ this.attachClassifierFeatures(ProjectHelper.getTestFeatures(this.project), featureUrls,
+ this.attachTestFeatures);
- if ( this.attachTestFeatures ) {
- this.attachClassifierFeatures(ProjectHelper.getTestFeatures(this.project).values(), featureUrls);
- }
if (this.createReferenceFile) {
this.createReferenceFile(featureUrls);
}
@@ -131,11 +136,21 @@ public class AttachFeaturesMojo extends AbstractFeatureMojo {
* Attach all features
* @throws MojoExecutionException
*/
- void attachClassifierFeatures(final Collection<Feature> features, final List<String> featureUrls)
+ void attachClassifierFeatures(final Map<String, Feature> features, final List<String> featureUrls,
+ final boolean addSourceFeatures)
throws MojoExecutionException {
- for (final Feature f : features) {
- attach(f, f.getId().getClassifier());
- featureUrls.add(f.getId().toMvnUrl());
+ for (final Map.Entry<String, Feature> entry : features.entrySet()) {
+ final boolean add;
+ if (ProjectHelper.isAggregate(entry.getKey())) {
+ add = ProjectHelper.isAttachAggregate(entry.getKey());
+ } else {
+ add = addSourceFeatures;
+ }
+
+ if (add) {
+ attach(entry.getValue());
+ featureUrls.add(entry.getValue().getId().toMvnUrl());
+ }
}
}
}
diff --git a/src/test/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesMojoTest.java b/src/test/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesMojoTest.java
index 5893a56..1c34127 100644
--- a/src/test/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesMojoTest.java
+++ b/src/test/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesMojoTest.java
@@ -16,6 +16,29 @@
*/
package org.apache.sling.feature.maven.mojos;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.FileReader;
+import java.lang.reflect.Method;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Dictionary;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -42,29 +65,6 @@ import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
-import java.io.File;
-import java.io.FileReader;
-import java.lang.reflect.Method;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Dictionary;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
@SuppressWarnings("deprecation")
public class AggregateFeaturesMojoTest {
private Path tempDir;
@@ -129,7 +129,7 @@ public class AggregateFeaturesMojoTest {
af.features = featuresDir;
af.execute();
- Feature genFeat = featureMap.get(":aggregate:aggregated");
+ Feature genFeat = featureMap.get(":aggregate:aggregated:T");
assertNotNull(genFeat);
ArtifactId id = genFeat.getId();
@@ -206,7 +206,7 @@ public class AggregateFeaturesMojoTest {
af.execute();
- Feature genFeat = featureMap.get(":aggregate:aggregated");
+ Feature genFeat = featureMap.get(":aggregate:aggregated:T");
assertNotNull(genFeat);
ArtifactId id = genFeat.getId();
@@ -377,7 +377,7 @@ public class AggregateFeaturesMojoTest {
af.execute();
- Feature genFeat = featureMap.get(":aggregate:agg");
+ Feature genFeat = featureMap.get(":aggregate:agg:T");
ArtifactId id = genFeat.getId();
assertEquals("g", id.getGroupId());
@@ -464,7 +464,7 @@ public class AggregateFeaturesMojoTest {
}).when(af.artifactResolver).resolve(Mockito.any(Artifact.class), Mockito.anyList(), Mockito.any(ArtifactRepository.class));
af.execute();
- Feature genFeat = featureMap.get(":aggregate:mynewfeature");
+ Feature genFeat = featureMap.get(":aggregate:mynewfeature:T");
ArtifactId id = genFeat.getId();
assertEquals("mygroup", id.getGroupId());
assertEquals("myart", id.getArtifactId());
@@ -769,7 +769,7 @@ public class AggregateFeaturesMojoTest {
af.handlerConfiguration = new HashMap<>();
af.execute();
- Feature genFeat = featureMap.get(":aggregate:myagg");
+ Feature genFeat = featureMap.get(":aggregate:myagg:T");
Bundles bundles = genFeat.getBundles();
assertEquals(3, bundles.size());
assertTrue(bundles.contains(new org.apache.sling.feature.Artifact(
@@ -872,7 +872,7 @@ public class AggregateFeaturesMojoTest {
af.execute();
- Feature genFeat = featureMap.get(":aggregate:myagg");
+ Feature genFeat = featureMap.get(":aggregate:myagg:T");
Bundles bundles = genFeat.getBundles();
assertEquals(1, bundles.size());
assertTrue(bundles.contains(new org.apache.sling.feature.Artifact(
diff --git a/src/test/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojoTest.java b/src/test/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojoTest.java
index b6f8017..ceee51d 100644
--- a/src/test/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojoTest.java
+++ b/src/test/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojoTest.java
@@ -19,7 +19,8 @@ package org.apache.sling.feature.maven.mojos;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.maven.model.Build;
import org.apache.maven.project.MavenProject;
@@ -36,12 +37,12 @@ public class AttachFeaturesMojoTest {
File feat_a = new File(getClass().getResource("/attach-resources/features/processed/test_a.json").toURI());
File feat_d = new File(getClass().getResource("/attach-resources/features/processed/test_d.json").toURI());
- final List<Feature> features = new ArrayList<>();
+ final Map<String, Feature> features = new HashMap<>();
try ( final FileReader r = new FileReader(feat_a) ) {
- features.add(FeatureJSONReader.read(r, feat_a.getAbsolutePath()));
+ features.put(feat_a.getAbsolutePath(), FeatureJSONReader.read(r, feat_a.getAbsolutePath()));
}
try ( final FileReader r = new FileReader(feat_d) ) {
- features.add(FeatureJSONReader.read(r, feat_d.getAbsolutePath()));
+ features.put(feat_d.getAbsolutePath(), FeatureJSONReader.read(r, feat_d.getAbsolutePath()));
}
File featuresDir = feat_a.getParentFile().getParentFile().getParentFile();
@@ -61,7 +62,7 @@ public class AttachFeaturesMojoTest {
MavenProjectHelper helper = Mockito.mock(MavenProjectHelper.class);
af.projectHelper = helper;
- af.attachClassifierFeatures(features, new ArrayList<>());
+ af.attachClassifierFeatures(features, new ArrayList<>(), true);
Mockito.verify(helper).attachArtifact(project, FeatureConstants.PACKAGING_FEATURE, "testa", new File(featuresDir, "slingfeature-tmp" + File.separatorChar + "feature-testa.json"));
Mockito.verify(helper).attachArtifact(project, FeatureConstants.PACKAGING_FEATURE, "testd", new File(featuresDir, "slingfeature-tmp" + File.separatorChar + "feature-testd.json"));
Mockito.verifyNoMoreInteractions(helper);