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