Repository: karaf Updated Branches: refs/heads/master 2e9505340 -> 0de824307
[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/master Commit: 58827d8b6e47d1b1c11b33ab942acadfbcbc3f80 Parents: e409ee5 Author: Grzegorz Grzybek <[email protected]> Authored: Wed Jul 12 15:06:58 2017 +0200 Committer: Grzegorz Grzybek <[email protected]> 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(); + } + +}
