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 79264e9 SLING-7962 : Add mojo for downloading all artifacts and
putting them into a build directory
79264e9 is described below
commit 79264e91c8e7171a83e7ce5a1a3ee2a24c2e27c1
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Fri Sep 28 17:39:51 2018 +0200
SLING-7962 : Add mojo for downloading all artifacts and putting them into a
build directory
---
.../sling/feature/maven/mojos/RepositoryMojo.java | 73 ++++++++++++++++------
1 file changed, 54 insertions(+), 19 deletions(-)
diff --git
a/src/main/java/org/apache/sling/feature/maven/mojos/RepositoryMojo.java
b/src/main/java/org/apache/sling/feature/maven/mojos/RepositoryMojo.java
index d86fefa..58de84c 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/RepositoryMojo.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/RepositoryMojo.java
@@ -17,7 +17,11 @@
package org.apache.sling.feature.maven.mojos;
import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
import java.util.Map;
import org.apache.commons.io.FileUtils;
@@ -33,6 +37,8 @@ import org.apache.maven.plugins.annotations.ResolutionScope;
import org.apache.sling.feature.Extension;
import org.apache.sling.feature.ExtensionType;
import org.apache.sling.feature.Feature;
+import org.apache.sling.feature.io.json.FeatureJSONReader;
+import org.apache.sling.feature.io.json.FeatureJSONWriter;
import org.apache.sling.feature.maven.ProjectHelper;
/**
@@ -75,17 +81,43 @@ public class RepositoryMojo extends AbstractFeatureMojo {
final Map<String, org.apache.sling.feature.Feature> features =
ProjectHelper.getAssembledFeatures(this.project);
for(final Feature f : features.values()) {
- for(final org.apache.sling.feature.Artifact artifact :
f.getBundles()) {
- copyArtifactToRepository(artifact, artifactDir);
- }
- for(final Extension ext : f.getExtensions()) {
- if ( ext.getType() == ExtensionType.ARTIFACTS ) {
- for(final org.apache.sling.feature.Artifact artifact :
ext.getArtifacts()) {
- copyArtifactToRepository(artifact, artifactDir);
- }
+ processFeature(artifactDir, f);
+ }
+ }
+
+ private void processFeature(final File artifactDir, final Feature f)
throws MojoExecutionException {
+ for(final org.apache.sling.feature.Artifact artifact : f.getBundles())
{
+ copyArtifactToRepository(artifact, artifactDir);
+ }
+ for(final Extension ext : f.getExtensions()) {
+ if ( ext.getType() == ExtensionType.ARTIFACTS ) {
+ for(final org.apache.sling.feature.Artifact artifact :
ext.getArtifacts()) {
+ copyArtifactToRepository(artifact, artifactDir);
}
}
}
+
+ final File featureFile = getRepositoryFile(artifactDir, f.getId());
+ featureFile.getParentFile().mkdirs();
+ try ( final Writer writer = new FileWriter(featureFile)) {
+ FeatureJSONWriter.write(writer, f);
+ } catch (final IOException e) {
+ throw new MojoExecutionException("Unable to write feature file ",
e);
+ }
+ if ( f.getInclude() != null ) {
+ final Artifact source =
ProjectHelper.getOrResolveArtifact(this.project,
+ this.mavenSession,
+ this.artifactHandlerManager,
+ this.resolver,
+ f.getInclude().getId());
+
+ try (final Reader reader = new FileReader(source.getFile()) ) {
+ final Feature inc = FeatureJSONReader.read(reader,
f.getId().toMvnId());
+ processFeature(artifactDir, inc);
+ } catch (final IOException e) {
+ throw new MojoExecutionException("Unable to read feature file
", e);
+ }
+ }
}
/**
@@ -94,25 +126,25 @@ public class RepositoryMojo extends AbstractFeatureMojo {
* @param artifact The artifact
* @return The file
*/
- private File getRepositoryFile(final File artifactDir, final
org.apache.sling.feature.Artifact artifact) {
+ private File getRepositoryFile(final File artifactDir, final
org.apache.sling.feature.ArtifactId artifact) {
final StringBuilder artifactNameBuilder = new StringBuilder();
- artifactNameBuilder.append(artifact.getId().getArtifactId());
+ artifactNameBuilder.append(artifact.getArtifactId());
artifactNameBuilder.append('-');
- artifactNameBuilder.append(artifact.getId().getVersion());
- if ( artifact.getId().getClassifier() != null ) {
+ artifactNameBuilder.append(artifact.getVersion());
+ if ( artifact.getClassifier() != null ) {
artifactNameBuilder.append('-');
- artifactNameBuilder.append(artifact.getId().getClassifier());
+ artifactNameBuilder.append(artifact.getClassifier());
}
artifactNameBuilder.append('.');
- artifactNameBuilder.append(artifact.getId().getType());
+ artifactNameBuilder.append(artifact.getType());
final String artifactName = artifactNameBuilder.toString();
final StringBuilder sb = new StringBuilder();
- sb.append(artifact.getId().getGroupId().replace('.',
File.separatorChar));
+ sb.append(artifact.getGroupId().replace('.', File.separatorChar));
sb.append(File.separatorChar);
- sb.append(artifact.getId().getArtifactId());
+ sb.append(artifact.getArtifactId());
sb.append(File.separatorChar);
- sb.append(artifact.getId().getVersion());
+ sb.append(artifact.getVersion());
sb.append(File.separatorChar);
sb.append(artifactName);
final String destPath = sb.toString();
@@ -130,8 +162,11 @@ public class RepositoryMojo extends AbstractFeatureMojo {
private void copyArtifactToRepository(final
org.apache.sling.feature.Artifact artifact,
final File artifactDir)
throws MojoExecutionException {
- final File artifactFile = getRepositoryFile(artifactDir, artifact);
-
+ final File artifactFile = getRepositoryFile(artifactDir,
artifact.getId());
+ // TODO - we could overwrite snapshots?
+ if ( artifactFile.exists() ) {
+ return;
+ }
final Artifact source =
ProjectHelper.getOrResolveArtifact(this.project,
this.mavenSession,
this.artifactHandlerManager,