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());
