You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gg...@apache.org on 2017/07/12 13:08:54 UTC

karaf git commit: [KARAF-5164] Use Maven reactor to resolve artifacts needed by VerifyMojo and AssemblyMojo [Forced Update!]

Repository: karaf
Updated Branches:
  refs/heads/grgrzybek-KARAF-5164-master 5f5163d13 -> 58827d8b6 (forced update)


[KARAF-5164] Use Maven reactor to resolve artifacts needed by VerifyMojo and AssemblyMojo


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

Branch: refs/heads/grgrzybek-KARAF-5164-master
Commit: 58827d8b6e47d1b1c11b33ab942acadfbcbc3f80
Parents: e409ee5
Author: Grzegorz Grzybek <gr...@gmail.com>
Authored: Wed Jul 12 15:06:58 2017 +0200
Committer: Grzegorz Grzybek <gr...@gmail.com>
Committed: Wed Jul 12 15:08:30 2017 +0200

----------------------------------------------------------------------
 .../apache/karaf/profile/assembly/Builder.java  |  11 ++
 .../org/apache/karaf/tooling/AssemblyMojo.java  |   7 ++
 .../org/apache/karaf/tooling/VerifyMojo.java    |   8 +-
 .../tooling/utils/ReactorMavenResolver.java     | 108 +++++++++++++++++++
 4 files changed, 133 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/58827d8b/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 808c333..163997b 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
@@ -45,6 +45,7 @@ import java.util.TreeSet;
 import java.util.UUID;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
+import java.util.function.Function;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
 import java.util.regex.Pattern;
@@ -175,6 +176,8 @@ public class Builder {
     private KarafPropertyEdits propertyEdits;
     private Map<String, String> translatedUrls;
 
+    private Function<MavenResolver, MavenResolver> resolverWrapper = null;
+
     public static Builder newInstance() {
         return new Builder();
     }
@@ -336,6 +339,11 @@ public class Builder {
         return this;
     }
 
+    public Builder resolverWrapper(Function<MavenResolver, MavenResolver> wrapper) {
+        this.resolverWrapper = wrapper;
+        return this;
+    }
+
     public Builder staticFramework() {
         // TODO: load this from resources
         return staticFramework("4.0.0-SNAPSHOT");
@@ -471,6 +479,9 @@ public class Builder {
             props.put(Builder.ORG_OPS4J_PAX_URL_MVN_PID + ".repositories", mavenRepositories);
         }
         MavenResolver resolver = MavenResolvers.createMavenResolver(props, ORG_OPS4J_PAX_URL_MVN_PID);
+        if (resolverWrapper != null) {
+            resolver = resolverWrapper.apply(resolver);
+        }
         executor = Executors.newScheduledThreadPool(8);
         manager = new CustomDownloadManager(resolver, executor, null, translatedUrls);
         this.resolver = new ResolverImpl(new Slf4jResolverLog(LOGGER));

http://git-wip-us.apache.org/repos/asf/karaf/blob/58827d8b/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 4c5a5d0..3bc5b08 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
@@ -37,15 +37,18 @@ import org.apache.karaf.profile.assembly.Builder;
 import org.apache.karaf.tooling.utils.IoUtils;
 import org.apache.karaf.tooling.utils.MavenUtil;
 import org.apache.karaf.tooling.utils.MojoSupport;
+import org.apache.karaf.tooling.utils.ReactorMavenResolver;
 import org.apache.karaf.tools.utils.model.KarafPropertyEdits;
 import org.apache.karaf.tools.utils.model.io.stax.KarafPropertyInstructionsModelStaxReader;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.apache.maven.repository.internal.MavenWorkspaceReader;
 
 /**
  * Creates a customized Karaf distribution by installing features and setting up
@@ -258,6 +261,9 @@ public class AssemblyMojo extends MojoSupport {
     @Parameter
     protected Map<String, String> system;
 
+    @Component(role = MavenWorkspaceReader.class, hint = "reactor")
+    protected MavenWorkspaceReader reactor;
+
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
         try {
@@ -322,6 +328,7 @@ public class AssemblyMojo extends MojoSupport {
         builder.offline(mavenSession.isOffline());
         builder.localRepository(localRepo.getBasedir());
         builder.mavenRepositories(remote.toString());
+        builder.resolverWrapper((resolver) -> new ReactorMavenResolver(reactor, resolver));
         builder.javase(javase);
 
         // Set up config and system props

http://git-wip-us.apache.org/repos/asf/karaf/blob/58827d8b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/VerifyMojo.java
----------------------------------------------------------------------
diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/VerifyMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/VerifyMojo.java
index 5dad76a..1b592d7 100644
--- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/VerifyMojo.java
+++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/VerifyMojo.java
@@ -80,14 +80,17 @@ import org.apache.karaf.features.internal.util.MapUtils;
 import org.apache.karaf.features.internal.util.MultiException;
 import org.apache.karaf.profile.assembly.CustomDownloadManager;
 import org.apache.karaf.tooling.utils.MojoSupport;
+import org.apache.karaf.tooling.utils.ReactorMavenResolver;
 import org.apache.karaf.util.config.PropertiesLoader;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.repository.internal.MavenWorkspaceReader;
 import org.ops4j.pax.url.mvn.MavenResolver;
 import org.ops4j.pax.url.mvn.MavenResolvers;
 import org.osgi.framework.Bundle;
@@ -148,6 +151,9 @@ public class VerifyMojo extends MojoSupport {
     @Parameter(defaultValue = "${project}", readonly = true)
     protected MavenProject project;
 
+    @Component(role = MavenWorkspaceReader.class, hint = "reactor")
+    protected MavenWorkspaceReader reactor;
+
     @Parameter(property = "skip", defaultValue = "${features.verify.skip}")
     protected boolean skip;
 
@@ -189,7 +195,7 @@ public class VerifyMojo extends MojoSupport {
         config.put("maven.localRepository", localRepo.getBasedir());
         config.put("maven.settings", mavenSession.getRequest().getUserSettingsFile().toString());
         // TODO: add more configuration bits ?
-        resolver = MavenResolvers.createMavenResolver(config, "maven");
+        resolver = new ReactorMavenResolver(reactor, MavenResolvers.createMavenResolver(config, "maven"));
         doExecute();
     }
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/58827d8b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/ReactorMavenResolver.java
----------------------------------------------------------------------
diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/ReactorMavenResolver.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/ReactorMavenResolver.java
new file mode 100644
index 0000000..47f6f04
--- /dev/null
+++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/ReactorMavenResolver.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.karaf.tooling.utils;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+
+import org.apache.maven.repository.internal.MavenWorkspaceReader;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.ops4j.pax.url.mvn.MavenResolver;
+import org.ops4j.pax.url.mvn.ServiceConstants;
+import org.ops4j.pax.url.mvn.internal.Parser;
+
+/**
+ * {@link MavenResolver} that may look up artifacts inside Maven reactor
+ */
+public class ReactorMavenResolver implements MavenResolver {
+
+    private final MavenWorkspaceReader reactor;
+    private final MavenResolver fallback;
+
+    public ReactorMavenResolver(MavenWorkspaceReader reactor, MavenResolver fallback) {
+        this.reactor = reactor;
+        this.fallback = fallback;
+    }
+
+    private Artifact toArtifact(String url) throws MalformedURLException {
+        if (url.startsWith(ServiceConstants.PROTOCOL + ":")) {
+            url = url.substring(4);
+        }
+        Parser parser = new Parser(url);
+        return new DefaultArtifact(parser.getGroup(), parser.getArtifact(), parser.getClassifier(),
+                parser.getType(), parser.getVersion());
+    }
+
+    @Override
+    public File resolve(String url) throws IOException {
+        Artifact artifact = toArtifact(url);
+        File file = reactor.findArtifact(artifact);
+        return file == null ? fallback.resolve(url) : file;
+    }
+
+    @Override
+    public File resolve(String url, Exception previousException) throws IOException {
+        Artifact artifact = toArtifact(url);
+        File file = reactor.findArtifact(artifact);
+        return file == null ? fallback.resolve(url, previousException) : file;
+    }
+
+    @Override
+    public File resolve(String groupId, String artifactId, String classifier, String extension, String version) throws IOException {
+        File file = reactor.findArtifact(new DefaultArtifact(groupId, artifactId, classifier, extension, version));
+        return file == null ? fallback.resolve(String.format("mvn:%s/%s/%s/%s/%s", groupId, artifactId, version, extension, classifier)) : file;
+    }
+
+    @Override
+    public File resolve(String groupId, String artifactId, String classifier, String extension, String version, Exception previousException) throws IOException {
+        File file = reactor.findArtifact(new DefaultArtifact(groupId, artifactId, classifier, extension, version));
+        return file == null ? fallback.resolve(String.format("mvn:%s/%s/%s/%s/%s", groupId, artifactId, version, extension, classifier), previousException) : file;
+    }
+
+    @Override
+    public File resolveMetadata(String groupId, String artifactId, String type, String version) throws IOException {
+        return fallback.resolveMetadata(groupId, artifactId, type, version);
+    }
+
+    @Override
+    public File resolveMetadata(String groupId, String artifactId, String type, String version, Exception previousException) throws IOException {
+        return fallback.resolveMetadata(groupId, artifactId, type, version, previousException);
+    }
+
+    @Override
+    public void upload(String groupId, String artifactId, String classifier, String extension, String version, File artifact) throws IOException {
+        fallback.upload(groupId, artifactId, classifier, extension, version, artifact);
+    }
+
+    @Override
+    public void uploadMetadata(String groupId, String artifactId, String type, String version, File artifact) throws IOException {
+        fallback.uploadMetadata(groupId, artifactId, type, version, artifact);
+    }
+
+    @Override
+    public RetryChance isRetryableException(Exception exception) {
+        return fallback.isRetryableException(exception);
+    }
+
+    @Override
+    public void close() throws IOException {
+        fallback.close();
+    }
+
+}