From d1a0c43a5440bb80496131cf7356410a10c45837 Mon Sep 17 00:00:00 2001 From: Jungtaek Lim Date: Tue, 18 Apr 2017 10:45:04 +0900 Subject: [PATCH] STORM-2481 Upgrade Aether version to resolve Aether bug BUG-451566 * this resolves NPE issue on Aether and helps showing proper error message * this also fixes the bug which dependencies root directorys does not exist * after the patch it will create the directory if not found --- external/storm-submit-tools/pom.xml | 132 +++++++----------- .../command/DependencyResolverMain.java | 12 +- .../storm/submit/dependency/AetherUtils.java | 14 +- .../storm/submit/dependency/Booter.java | 21 +-- .../submit/dependency/DependencyResolver.java | 24 ++-- .../dependency/RepositorySystemFactory.java | 65 ++++----- .../submit/dependency/AetherUtilsTest.java | 10 +- .../dependency/DependencyResolverTest.java | 8 +- pom.xml | 2 +- 9 files changed, 125 insertions(+), 163 deletions(-) diff --git a/external/storm-submit-tools/pom.xml b/external/storm-submit-tools/pom.xml index 599f98c8fd3..7fc25a5aaf9 100644 --- a/external/storm-submit-tools/pom.xml +++ b/external/storm-submit-tools/pom.xml @@ -44,118 +44,86 @@ - org.apache.maven - maven-plugin-api - 3.0 - - - org.codehaus.plexus - plexus-utils - - - org.sonatype.sisu - sisu-inject-plexus - - - org.apache.maven - maven-model - - + org.eclipse.aether + aether-api + ${aetherVersion} - org.sonatype.aether - aether-api - 1.12 + org.eclipse.aether + aether-spi + ${aetherVersion} - org.sonatype.aether + org.eclipse.aether aether-util - 1.12 + ${aetherVersion} - org.sonatype.aether + org.eclipse.aether aether-impl - 1.12 + ${aetherVersion} - org.apache.maven - maven-aether-provider - 3.0.3 - - - org.sonatype.aether - aether-api - - - org.sonatype.aether - aether-spi - - - org.sonatype.aether - aether-util - - - org.sonatype.aether - aether-impl - - - org.codehaus.plexus - plexus-utils - - + org.eclipse.aether + aether-connector-basic + ${aetherVersion} - org.sonatype.aether - aether-connector-file - 1.12 + org.eclipse.aether + aether-transport-file + ${aetherVersion} - org.sonatype.aether - aether-connector-wagon - 1.12 - - - org.apache.maven.wagon - wagon-provider-api - - + org.eclipse.aether + aether-transport-http + ${aetherVersion} - org.apache.maven.wagon - wagon-provider-api - 1.0 - - - org.codehaus.plexus - plexus-utils - - + org.apache.maven + maven-aether-provider + ${mavenVersion} - org.apache.maven.wagon - wagon-http-lightweight - 1.0 + org.codehaus.plexus + plexus-utils + 2.1 + + + + org.eclipse.sisu + org.eclipse.sisu.plexus + 0.1.1 + true - org.apache.maven.wagon - wagon-http-shared + javax.enterprise + cdi-api - - org.apache.maven.wagon - wagon-http - 1.0 + org.sonatype.sisu + sisu-guice + 3.1.6 + no_aop + true + + aopalliance + aopalliance + + + com.google.code.findbugs + jsr305 + @@ -166,6 +134,12 @@ ${project.version} test + + commons-io + commons-io + 2.5 + test + diff --git a/external/storm-submit-tools/src/main/java/org/apache/storm/submit/command/DependencyResolverMain.java b/external/storm-submit-tools/src/main/java/org/apache/storm/submit/command/DependencyResolverMain.java index 6c96add3928..26cd1244bb7 100644 --- a/external/storm-submit-tools/src/main/java/org/apache/storm/submit/command/DependencyResolverMain.java +++ b/external/storm-submit-tools/src/main/java/org/apache/storm/submit/command/DependencyResolverMain.java @@ -24,10 +24,10 @@ import org.apache.storm.submit.dependency.AetherUtils; import org.apache.storm.submit.dependency.DependencyResolver; import org.json.simple.JSONValue; -import org.sonatype.aether.artifact.Artifact; -import org.sonatype.aether.graph.Dependency; -import org.sonatype.aether.repository.RemoteRepository; -import org.sonatype.aether.resolution.ArtifactResult; +import org.eclipse.aether.artifact.Artifact; +import org.eclipse.aether.graph.Dependency; +import org.eclipse.aether.repository.RemoteRepository; +import org.eclipse.aether.resolution.ArtifactResult; import java.io.File; import java.nio.file.Files; @@ -66,6 +66,10 @@ public static void main(String[] args) { try { String localMavenRepoPath = getOrDefaultLocalMavenRepositoryPath("local-repo"); + + // create root directory if not exist + Files.createDirectories(new File(localMavenRepoPath).toPath()); + DependencyResolver resolver = new DependencyResolver(localMavenRepoPath, repositories); List artifactResults = resolver.resolve(dependencies); diff --git a/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/AetherUtils.java b/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/AetherUtils.java index a84db3978e1..e1e8ca5c41d 100644 --- a/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/AetherUtils.java +++ b/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/AetherUtils.java @@ -17,12 +17,12 @@ */ package org.apache.storm.submit.dependency; -import org.sonatype.aether.artifact.Artifact; -import org.sonatype.aether.graph.Dependency; -import org.sonatype.aether.graph.Exclusion; -import org.sonatype.aether.repository.RemoteRepository; -import org.sonatype.aether.util.artifact.DefaultArtifact; -import org.sonatype.aether.util.artifact.JavaScopes; +import org.eclipse.aether.artifact.Artifact; +import org.eclipse.aether.artifact.DefaultArtifact; +import org.eclipse.aether.graph.Dependency; +import org.eclipse.aether.graph.Exclusion; +import org.eclipse.aether.repository.RemoteRepository; +import org.eclipse.aether.util.artifact.JavaScopes; import java.util.ArrayList; import java.util.Arrays; @@ -86,6 +86,6 @@ public static RemoteRepository parseRemoteRepository(String repository) { throw new IllegalArgumentException("Bad remote repository form: " + repository); } - return new RemoteRepository(parts[0], "default", parts[1]); + return new RemoteRepository.Builder(parts[0], "default", parts[1]).build(); } } diff --git a/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/Booter.java b/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/Booter.java index 0356e30df1d..31a6c500523 100644 --- a/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/Booter.java +++ b/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/Booter.java @@ -18,11 +18,12 @@ package org.apache.storm.submit.dependency; -import org.apache.maven.repository.internal.MavenRepositorySystemSession; -import org.sonatype.aether.RepositorySystem; -import org.sonatype.aether.RepositorySystemSession; -import org.sonatype.aether.repository.LocalRepository; -import org.sonatype.aether.repository.RemoteRepository; +import org.apache.maven.repository.internal.MavenRepositorySystemUtils; +import org.eclipse.aether.DefaultRepositorySystemSession; +import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.RepositorySystemSession; +import org.eclipse.aether.repository.LocalRepository; +import org.eclipse.aether.repository.RemoteRepository; import java.io.File; @@ -36,21 +37,21 @@ public static RepositorySystem newRepositorySystem() { public static RepositorySystemSession newRepositorySystemSession( RepositorySystem system, String localRepoPath) { - MavenRepositorySystemSession session = new MavenRepositorySystemSession(); + DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession(); LocalRepository localRepo = new LocalRepository(new File(localRepoPath).getAbsolutePath()); - session.setLocalRepositoryManager(system.newLocalRepositoryManager(localRepo)); + session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo)); return session; } public static RemoteRepository newCentralRepository() { - return new RemoteRepository("central", "default", "http://repo1.maven.org/maven2/"); + return new RemoteRepository.Builder("central", "default", "http://repo1.maven.org/maven2/").build(); } public static RemoteRepository newLocalRepository() { - return new RemoteRepository("local", - "default", "file://" + System.getProperty("user.home") + "/.m2/repository"); + return new RemoteRepository.Builder("local", + "default", "file://" + System.getProperty("user.home") + "/.m2/repository").build(); } } diff --git a/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/DependencyResolver.java b/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/DependencyResolver.java index a6dc4a2d4e2..1953b75254d 100644 --- a/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/DependencyResolver.java +++ b/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/DependencyResolver.java @@ -18,18 +18,18 @@ package org.apache.storm.submit.dependency; -import org.sonatype.aether.RepositorySystem; -import org.sonatype.aether.RepositorySystemSession; -import org.sonatype.aether.collection.CollectRequest; -import org.sonatype.aether.graph.Dependency; -import org.sonatype.aether.graph.DependencyFilter; -import org.sonatype.aether.repository.RemoteRepository; -import org.sonatype.aether.resolution.ArtifactResolutionException; -import org.sonatype.aether.resolution.ArtifactResult; -import org.sonatype.aether.resolution.DependencyRequest; -import org.sonatype.aether.resolution.DependencyResolutionException; -import org.sonatype.aether.util.artifact.JavaScopes; -import org.sonatype.aether.util.filter.DependencyFilterUtils; +import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.RepositorySystemSession; +import org.eclipse.aether.collection.CollectRequest; +import org.eclipse.aether.graph.Dependency; +import org.eclipse.aether.graph.DependencyFilter; +import org.eclipse.aether.repository.RemoteRepository; +import org.eclipse.aether.resolution.ArtifactResolutionException; +import org.eclipse.aether.resolution.ArtifactResult; +import org.eclipse.aether.resolution.DependencyRequest; +import org.eclipse.aether.resolution.DependencyResolutionException; +import org.eclipse.aether.util.artifact.JavaScopes; +import org.eclipse.aether.util.filter.DependencyFilterUtils; import java.io.File; import java.net.MalformedURLException; diff --git a/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/RepositorySystemFactory.java b/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/RepositorySystemFactory.java index 5d607328080..ae1c03a5528 100644 --- a/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/RepositorySystemFactory.java +++ b/external/storm-submit-tools/src/main/java/org/apache/storm/submit/dependency/RepositorySystemFactory.java @@ -6,9 +6,9 @@ * 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. @@ -18,50 +18,33 @@ package org.apache.storm.submit.dependency; -import org.apache.maven.repository.internal.DefaultServiceLocator; -import org.apache.maven.wagon.Wagon; -import org.apache.maven.wagon.providers.http.HttpWagon; -import org.apache.maven.wagon.providers.http.LightweightHttpWagon; -import org.sonatype.aether.RepositorySystem; -import org.sonatype.aether.connector.file.FileRepositoryConnectorFactory; -import org.sonatype.aether.connector.wagon.WagonProvider; -import org.sonatype.aether.connector.wagon.WagonRepositoryConnectorFactory; -import org.sonatype.aether.spi.connector.RepositoryConnectorFactory; +import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory; +import org.eclipse.aether.impl.DefaultServiceLocator; +import org.apache.maven.repository.internal.MavenRepositorySystemUtils; +import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.spi.connector.transport.TransporterFactory; +import org.eclipse.aether.transport.file.FileTransporterFactory; +import org.eclipse.aether.transport.http.HttpTransporterFactory; +import org.eclipse.aether.spi.connector.RepositoryConnectorFactory; /** * Get maven repository instance. */ public class RepositorySystemFactory { - public static RepositorySystem newRepositorySystem() { - DefaultServiceLocator locator = new DefaultServiceLocator(); - locator.addService(RepositoryConnectorFactory.class, FileRepositoryConnectorFactory.class); - locator.addService(RepositoryConnectorFactory.class, WagonRepositoryConnectorFactory.class); - locator.setServices(WagonProvider.class, new ManualWagonProvider()); - - return locator.getService(RepositorySystem.class); - } - - /** - * ManualWagonProvider - */ - public static class ManualWagonProvider implements WagonProvider { - - @Override - public Wagon lookup(String roleHint) throws Exception { - if ("http".equals(roleHint)) { - return new LightweightHttpWagon(); - } - - if ("https".equals(roleHint)) { - return new HttpWagon(); - } - - return null; + public static RepositorySystem newRepositorySystem() { + DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator(); + locator.addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class); + locator.addService(TransporterFactory.class, FileTransporterFactory.class); + locator.addService(TransporterFactory.class, HttpTransporterFactory.class); + + locator.setErrorHandler(new DefaultServiceLocator.ErrorHandler() { + @Override + public void serviceCreationFailed(Class type, Class impl, Throwable exception) { + exception.printStackTrace(); + } + }); + + return locator.getService(RepositorySystem.class); } - @Override - public void release(Wagon arg0) { - - } - } } diff --git a/external/storm-submit-tools/src/test/java/org/apache/storm/submit/dependency/AetherUtilsTest.java b/external/storm-submit-tools/src/test/java/org/apache/storm/submit/dependency/AetherUtilsTest.java index 9951621fbc4..5b5ce3edf79 100644 --- a/external/storm-submit-tools/src/test/java/org/apache/storm/submit/dependency/AetherUtilsTest.java +++ b/external/storm-submit-tools/src/test/java/org/apache/storm/submit/dependency/AetherUtilsTest.java @@ -19,11 +19,11 @@ import com.google.common.collect.Lists; import org.junit.Test; -import org.sonatype.aether.artifact.Artifact; -import org.sonatype.aether.graph.Dependency; -import org.sonatype.aether.graph.Exclusion; -import org.sonatype.aether.util.artifact.DefaultArtifact; -import org.sonatype.aether.util.artifact.JavaScopes; +import org.eclipse.aether.artifact.Artifact; +import org.eclipse.aether.graph.Dependency; +import org.eclipse.aether.graph.Exclusion; +import org.eclipse.aether.artifact.DefaultArtifact; +import org.eclipse.aether.util.artifact.JavaScopes; import java.util.List; diff --git a/external/storm-submit-tools/src/test/java/org/apache/storm/submit/dependency/DependencyResolverTest.java b/external/storm-submit-tools/src/test/java/org/apache/storm/submit/dependency/DependencyResolverTest.java index 086abadd536..8f7b750281a 100644 --- a/external/storm-submit-tools/src/test/java/org/apache/storm/submit/dependency/DependencyResolverTest.java +++ b/external/storm-submit-tools/src/test/java/org/apache/storm/submit/dependency/DependencyResolverTest.java @@ -23,10 +23,10 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -import org.sonatype.aether.graph.Dependency; -import org.sonatype.aether.resolution.ArtifactResult; -import org.sonatype.aether.util.artifact.DefaultArtifact; -import org.sonatype.aether.util.artifact.JavaScopes; +import org.eclipse.aether.graph.Dependency; +import org.eclipse.aether.resolution.ArtifactResult; +import org.eclipse.aether.artifact.DefaultArtifact; +import org.eclipse.aether.util.artifact.JavaScopes; import java.nio.file.Files; import java.nio.file.Path; diff --git a/pom.xml b/pom.xml index a87d92285b1..bf54381a2e0 100644 --- a/pom.xml +++ b/pom.xml @@ -284,7 +284,7 @@ !integration.* - 1.0.0.v20140518 + 1.1.0 3.1.0 1.0 0.32