Repository: karaf
Updated Branches:
  refs/heads/master 6a9ca438c -> caebbeb5d


[KARAF-4362] Improve the maven assembly goal so that it can run at package 
phase instead of install phase

Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/caebbeb5
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/caebbeb5
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/caebbeb5

Branch: refs/heads/master
Commit: caebbeb5d8fb819ff323f8dd3c0c557b541ada4c
Parents: 6a9ca43
Author: Guillaume Nodet <[email protected]>
Authored: Mon Feb 29 16:17:49 2016 +0100
Committer: Guillaume Nodet <[email protected]>
Committed: Mon Feb 29 16:17:49 2016 +0100

----------------------------------------------------------------------
 .../download/impl/MavenDownloadManager.java     |  2 +-
 .../assembly/AssemblyDeployCallback.java        |  2 +-
 .../apache/karaf/profile/assembly/Builder.java  | 16 +++++++--
 .../profile/assembly/CustomDownloadManager.java | 26 ++++++++++++++-
 .../org/apache/karaf/tooling/AssemblyMojo.java  | 35 ++++++++++++++++++++
 5 files changed, 76 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/caebbeb5/features/core/src/main/java/org/apache/karaf/features/internal/download/impl/MavenDownloadManager.java
----------------------------------------------------------------------
diff --git 
a/features/core/src/main/java/org/apache/karaf/features/internal/download/impl/MavenDownloadManager.java
 
b/features/core/src/main/java/org/apache/karaf/features/internal/download/impl/MavenDownloadManager.java
index 482c431..86e1f6a 100644
--- 
a/features/core/src/main/java/org/apache/karaf/features/internal/download/impl/MavenDownloadManager.java
+++ 
b/features/core/src/main/java/org/apache/karaf/features/internal/download/impl/MavenDownloadManager.java
@@ -78,7 +78,7 @@ public class MavenDownloadManager implements DownloadManager {
         return (Map) Collections.synchronizedMap(downloaded);
     }
 
-    class MavenDownloader implements Downloader {
+    protected class MavenDownloader implements Downloader {
 
         private volatile int pending = 0;
         private final MultiException exception = new MultiException("Error");

http://git-wip-us.apache.org/repos/asf/karaf/blob/caebbeb5/profile/src/main/java/org/apache/karaf/profile/assembly/AssemblyDeployCallback.java
----------------------------------------------------------------------
diff --git 
a/profile/src/main/java/org/apache/karaf/profile/assembly/AssemblyDeployCallback.java
 
b/profile/src/main/java/org/apache/karaf/profile/assembly/AssemblyDeployCallback.java
index 9aefce6..2c4a09b 100644
--- 
a/profile/src/main/java/org/apache/karaf/profile/assembly/AssemblyDeployCallback.java
+++ 
b/profile/src/main/java/org/apache/karaf/profile/assembly/AssemblyDeployCallback.java
@@ -202,7 +202,7 @@ public class AssemblyDeployCallback implements 
Deployer.DeployCallback {
                 path = Parser.pathFromMaven(uri);
             } else {
                 uri = uri.replaceAll("[^0-9a-zA-Z.\\-_]+", "_");
-               if (uri.length() > 256) {
+                       if (uri.length() > 256) {
                     //to avoid the File name too long exception
                     uri = uri.substring(0, 255);
                 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/caebbeb5/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java
----------------------------------------------------------------------
diff --git 
a/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java 
b/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java
index 3076375..f0758e1 100644
--- a/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java
+++ b/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java
@@ -160,6 +160,7 @@ public class Builder {
     private Path systemDirectory;
     private Map<String, Profile> allProfiles;
     private KarafPropertyEdits propertyEdits;
+    private Map<String, String> translatedUrls;
 
     public static Builder newInstance() {
         return new Builder();
@@ -362,6 +363,17 @@ public class Builder {
         return this;
     }
 
+    /**
+     * Specify a set of url mappings to use instead of
+     * downloading from the original urls.
+     * @param translatedUrls the urls translations.
+     * @return this.
+     */
+    public Builder translatedUrls(Map<String, String> translatedUrls) {
+        this.translatedUrls = translatedUrls;
+        return this;
+    }
+
     public List<String> getBlacklistedProfiles() {
         return blacklistedProfiles;
     }
@@ -415,7 +427,7 @@ public class Builder {
         }
         MavenResolver resolver = MavenResolvers.createMavenResolver(props, 
ORG_OPS4J_PAX_URL_MVN_PID);
         executor = Executors.newScheduledThreadPool(8);
-        manager = new CustomDownloadManager(resolver, executor);
+        manager = new CustomDownloadManager(resolver, executor, null, 
translatedUrls);
         this.resolver = new ResolverImpl(new Slf4jResolverLog(LOGGER));
 
         //
@@ -506,7 +518,7 @@ public class Builder {
         Profile overallOverlay = Profiles.getOverlay(overallProfile, 
allProfiles, environment);
         Profile overallEffective = Profiles.getEffective(overallOverlay, 
false);
 
-        manager = new CustomDownloadManager(resolver, executor, 
overallEffective);
+        manager = new CustomDownloadManager(resolver, executor, 
overallEffective, translatedUrls);
 
         Hashtable<String, String> agentProps = new 
Hashtable<>(overallEffective.getConfiguration(ORG_OPS4J_PAX_URL_MVN_PID));
         final Map<String, String> properties = new HashMap<>();

http://git-wip-us.apache.org/repos/asf/karaf/blob/caebbeb5/profile/src/main/java/org/apache/karaf/profile/assembly/CustomDownloadManager.java
----------------------------------------------------------------------
diff --git 
a/profile/src/main/java/org/apache/karaf/profile/assembly/CustomDownloadManager.java
 
b/profile/src/main/java/org/apache/karaf/profile/assembly/CustomDownloadManager.java
index 6c7ae95..b8bf017 100644
--- 
a/profile/src/main/java/org/apache/karaf/profile/assembly/CustomDownloadManager.java
+++ 
b/profile/src/main/java/org/apache/karaf/profile/assembly/CustomDownloadManager.java
@@ -16,9 +16,11 @@
  */
 package org.apache.karaf.profile.assembly;
 
+import java.util.Map;
 import java.util.concurrent.ScheduledExecutorService;
 
 import org.apache.karaf.features.FeaturesService;
+import org.apache.karaf.features.internal.download.Downloader;
 import org.apache.karaf.features.internal.download.impl.AbstractDownloadTask;
 import org.apache.karaf.features.internal.download.impl.MavenDownloadManager;
 import org.apache.karaf.profile.Profile;
@@ -27,18 +29,40 @@ import org.ops4j.pax.url.mvn.MavenResolver;
 public class CustomDownloadManager extends MavenDownloadManager {
 
     private final Profile profile;
+    private final Map<String, String> translatedUrls;
 
     public CustomDownloadManager(MavenResolver resolver, 
ScheduledExecutorService executor) {
-        this(resolver, executor, null);
+        this(resolver, executor, null, null);
     }
 
     public CustomDownloadManager(MavenResolver resolver, 
ScheduledExecutorService executor, Profile profile) {
+        this(resolver, executor, profile, null);
+    }
+
+    public CustomDownloadManager(MavenResolver resolver, 
ScheduledExecutorService executor, Profile profile, Map<String, String> 
translatedUrls) {
         super(resolver, executor, 0, 1);
         this.profile = profile;
+        this.translatedUrls = translatedUrls;
     }
 
     @Override
     protected AbstractDownloadTask createCustomDownloadTask(String url) {
         return new CustomSimpleDownloadTask(executorService, profile, url);
     }
+
+    @Override
+    public Downloader createDownloader() {
+        return new CustomMavenDownloader();
+    }
+
+    class CustomMavenDownloader extends MavenDownloader {
+        protected AbstractDownloadTask createDownloadTask(String url) {
+            if (translatedUrls != null && translatedUrls.containsKey(url)) {
+                url = translatedUrls.get(url);
+            }
+            return super.createDownloadTask(url);
+        }
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/caebbeb5/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java
----------------------------------------------------------------------
diff --git 
a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java
 
b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java
index cee6109..a2dcaa9 100644
--- 
a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java
+++ 
b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java
@@ -39,7 +39,9 @@ import java.io.InputStream;
 import java.nio.file.Files;
 import java.nio.file.attribute.PosixFilePermissions;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Creates a customized Karaf distribution by installing features and setting 
up
@@ -222,6 +224,14 @@ public class AssemblyMojo extends MojoSupport {
     @Parameter(defaultValue = 
"${project.basedir}/src/main/karaf/assembly-property-edits.xml")
     protected String propertyFileEdits;
 
+    /**
+     * Specify a set of translated urls to use instead of downloading the 
artifacts
+     * from their original locations.  The given set will be extended with 
already
+     * built artifacts from the maven project.
+     */
+    @Parameter
+    protected Map<String, String> translatedUrls;
+
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
         try {
@@ -305,6 +315,31 @@ public class AssemblyMojo extends MojoSupport {
             }
         }
 
+        Map<String, String> urls = new HashMap<>();
+        List<Artifact> artifacts = new 
ArrayList<>(project.getAttachedArtifacts());
+        artifacts.add(project.getArtifact());
+        for (Artifact artifact : artifacts) {
+            if (artifact.getFile() != null && artifact.getFile().exists()) {
+                String mvnUrl = "mvn:" + artifact.getGroupId() + "/" + 
artifact.getArtifactId()
+                        + "/" + artifact.getVersion();
+                String type = artifact.getType();
+                if ("bundle".equals(type)) {
+                    type = "jar";
+                }
+                if (!"jar".equals(type) || artifact.getClassifier() != null) {
+                    mvnUrl += "/" + type;
+                    if (artifact.getClassifier() != null) {
+                        mvnUrl += "/" + artifact.getClassifier();
+                    }
+                }
+                urls.put(mvnUrl, artifact.getFile().toURI().toString());
+            }
+        }
+        if (translatedUrls != null) {
+            urls.putAll(translatedUrls);
+        }
+        builder.translatedUrls(urls);
+
         // creating system directory
         getLog().info("Creating work directory");
         builder.homeDirectory(workDirectory.toPath());

Reply via email to