This is an automated email from the ASF dual-hosted git repository. pdallig pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/zeppelin.git
The following commit(s) were added to refs/heads/master by this push: new 56ac563 [ZEPPELIN-4989] Update to Maven resolver 56ac563 is described below commit 56ac563fe12fbed82d74d9e69b615685fd2ec90b Author: Philipp Dallig <philipp.dal...@gmail.com> AuthorDate: Fri Aug 7 10:54:15 2020 +0200 [ZEPPELIN-4989] Update to Maven resolver ### What is this PR for? This PR updates from aether to maven resolver. ### What type of PR is it? - Improvement ### Todos * [ ] - Task ### What is the Jira issue? * https://issues.apache.org/jira/browse/ZEPPELIN-4989 ### How should this be tested? * Travis-CI: https://travis-ci.org/github/Reamer/zeppelin/builds/729250923 ### Questions: * Does the licenses files need update? No * Is there breaking changes for older versions? No * Does this needs documentation? No Author: Philipp Dallig <philipp.dal...@gmail.com> Closes #3875 from Reamer/maven_resolver and squashes the following commits: 9b7ec55f1 [Philipp Dallig] Update to Maven resolver 92ff397bb [Philipp Dallig] Update download plugin --- mongodb/pom.xml | 7 + pom.xml | 7 +- submarine/pom.xml | 4 - .../submarine/PySubmarineInterpreterTest.java | 2 +- zeppelin-distribution/src/bin_license/LICENSE | 29 ++-- zeppelin-interpreter-integration/pom.xml | 2 +- zeppelin-interpreter/pom.xml | 122 ++++------------- .../zeppelin/dep/AbstractDependencyResolver.java | 86 ++++++++---- .../main/java/org/apache/zeppelin/dep/Booter.java | 41 ++++-- .../org/apache/zeppelin/dep/DependencyContext.java | 148 --------------------- .../apache/zeppelin/dep/DependencyResolver.java | 49 ++++--- .../java/org/apache/zeppelin/dep/Repository.java | 10 +- .../apache/zeppelin/dep/RepositoryListener.java | 4 +- .../zeppelin/dep/RepositorySystemFactory.java | 66 ++++----- .../org/apache/zeppelin/dep/TransferListener.java | 6 +- .../remote/RemoteInterpreterServer.java | 2 +- .../zeppelin/dep/DependencyResolverTest.java | 2 +- .../apache/zeppelin/rest/InterpreterRestApi.java | 2 +- .../zeppelin/service/InterpreterService.java | 16 +-- .../zeppelin/service/InterpreterServiceTest.java | 8 -- .../interpreter/InterpreterInfoSaving.java | 2 +- .../interpreter/InterpreterSettingManager.java | 6 +- .../interpreter/install/InstallInterpreter.java | 11 +- .../interpreter/InterpreterSettingManagerTest.java | 4 +- .../interpreter/ManagedInterpreterGroupTest.java | 2 +- .../org/apache/zeppelin/notebook/NotebookTest.java | 2 +- 26 files changed, 216 insertions(+), 424 deletions(-) diff --git a/mongodb/pom.xml b/mongodb/pom.xml index b3b4c1a..5943759 100644 --- a/mongodb/pom.xml +++ b/mongodb/pom.xml @@ -37,6 +37,13 @@ <interpreter.name>mongodb</interpreter.name> </properties> + <dependencies> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + </dependency> + </dependencies> + <build> <plugins> <plugin> diff --git a/pom.xml b/pom.xml index fc1a3a8..90ce0ae 100644 --- a/pom.xml +++ b/pom.xml @@ -139,6 +139,7 @@ <shiro.version>1.4.2</shiro.version> <joda.version>2.9.9</joda.version> <bouncycastle.version>1.60</bouncycastle.version> + <maven.version>3.6.3</maven.version> <hadoop2.7.version>2.7.7</hadoop2.7.version> <hadoop2.6.version>2.6.5</hadoop2.6.version> @@ -170,7 +171,7 @@ <plugin.compiler.version>3.8.1</plugin.compiler.version> <plugin.dependency.version>3.1.2</plugin.dependency.version> <plugin.deploy.version>2.8.2</plugin.deploy.version> - <plugin.download.version>1.3.0</plugin.download.version> + <plugin.download.version>1.6.0</plugin.download.version> <plugin.eclipse.version>2.8</plugin.eclipse.version> <plugin.enforcer.version>3.0.0-M3</plugin.enforcer.version> <plugin.exec.version>1.6.0</plugin.exec.version> @@ -878,10 +879,6 @@ <artifactId>HikariCP-java7</artifactId> </exclusion> <exclusion> - <groupId>com.google.inject</groupId> - <artifactId>guice</artifactId> - </exclusion> - <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </exclusion> diff --git a/submarine/pom.xml b/submarine/pom.xml index 4f40db5..9078fab 100644 --- a/submarine/pom.xml +++ b/submarine/pom.xml @@ -134,10 +134,6 @@ <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> - <exclusion> - <groupId>org.jsoup</groupId> - <artifactId>jsoup</artifactId> - </exclusion> </exclusions> </dependency> diff --git a/submarine/src/test/java/org/apache/zeppelin/submarine/PySubmarineInterpreterTest.java b/submarine/src/test/java/org/apache/zeppelin/submarine/PySubmarineInterpreterTest.java index 4b8a34a..5d18ae3 100644 --- a/submarine/src/test/java/org/apache/zeppelin/submarine/PySubmarineInterpreterTest.java +++ b/submarine/src/test/java/org/apache/zeppelin/submarine/PySubmarineInterpreterTest.java @@ -68,7 +68,7 @@ public class PySubmarineInterpreterTest extends BaseInterpreterTest { InterpreterResult intpResult = pySubmarineIntp.interpret(callTensorflowFunc, intpContext); // Check if the SubmarineInterpreter performs the tensorlfow function whether successfully. - assertEquals(intpResult.code(), InterpreterResult.Code.SUCCESS); + assertEquals(InterpreterResult.Code.SUCCESS, intpResult.code()); // Successfully execute tensorflow to get the version function, // otherwise it will trigger an exception. diff --git a/zeppelin-distribution/src/bin_license/LICENSE b/zeppelin-distribution/src/bin_license/LICENSE index cbfd20e..fb2b835 100644 --- a/zeppelin-distribution/src/bin_license/LICENSE +++ b/zeppelin-distribution/src/bin_license/LICENSE @@ -46,11 +46,10 @@ The following components are provided under Apache License. (Apache 2.0) Chill Java (com.twitter:chill-java:jar:0.8.0 - https://github.com/twitter/chill/) (Apache 2.0) Chill Protobuf (com.twitter:chill-protobuf:0.8.0 - https://github.com/twitter/chill/) (Apache 2.0) QDox (com.thoughtworks.qdox:qdox:jar:2.0-M3 - https://github.com/paul-hammant/qdox/) - (Apache 2.0) Codehaus Plexus (org.codehaus.plexus:plexus:jar:1.5.6 - https://codehaus-plexus.github.io/) - (Apache 2.0) Codehaus Plexus Interpolation (org.codehaus.plexus:plexus-interpolation:1.14 - https://codehaus-plexus.github.io/) + (Apache 2.0) Codehaus Plexus Interpolation (org.codehaus.plexus:plexus-interpolation:1.25 - https://github.com/codehaus-plexus/plexus-interpolation) (Apache 2.0) Codehaus Plexus Component Annotations (org.codehaus.plexus:plexus-component-annotations:1.5.5 - https://codehaus-plexus.github.io/) - (Apache 2.0) Codehaus Plexus Classwords (org.codehaus.plexus:plexus-classwords:2.4 - https://codehaus-plexus.github.io/) - (Apache 2.0) Codehaus Plexus Utils (org.codehaus.plexus:plexus-utils:2.0.7 - https://codehaus-plexus.github.io/) + (Apache 2.0) Codehaus Plexus Classwords (org.codehaus.plexus:plexus-classwords:2.6.0 - http://github.com/codehaus-plexus/plexus-classworlds) + (Apache 2.0) Codehaus Plexus Utils (org.codehaus.plexus:plexus-utils:3.2.1 - http://github.com/codehaus-plexus/plexus-utils) (Apache 2.0) findbugs jsr305 (com.google.code.findbugs:jsr305:jar:1.3.9 - http://findbugs.sourceforge.net/) (Apache 2.0) Google Guava (com.google.guava:guava:15.0 - https://code.google.com/p/guava-libraries/) (Apache 2.0) Jackson (com.fasterxml.jackson.core:jackson-core:2.7.0 - https://github.com/FasterXML/jackson-core) @@ -207,14 +206,14 @@ The following components are provided under Apache License. (Apache 2.0) Katan CSV 0.1.12 (com.nrinaudo:kantan.csv:0.1.12 - https://github.com/nrinaudo/kantan.csv) (Apache 2.0) Katan Codecs 0.1.6 (com.nrinaudo:kantan.codecs:0.1.6 - https://github.com/nrinaudo/kantan.csv) (Apache 2.0) jansi 1.4 (org.fusesource.jansi:jansi:1.4 - https://github.com/fusesource/jansi)/ - (Apache 2.0) Maven Plugin API 3.0 (org.apache.maven:maven-plugin-api:3.0 - https://github.com/apache/maven) - (Apache 2.0) Maven Artifact 3.0 (org.apache.maven:maven-artifact:3.0 - https://github.com/apache/maven) - (Apache 2.0) Maven Model Builder 3.0.3 (org.apache.maven:maven-model-builder:3.0.3 - https://github.com/apache/maven) - (Apache 2.0) Maven Repository Metadata 3.0.3 (org.apache.maven:maven-repository-metadata:3.0.3 - https://github.com/apache/maven) - (Apache 2.0) Maven Wagon Provider API 1.0 (org.apache.maven.wagon:wagon-provider-api:2.7 - https://mvnrepository.com/artifact/org.apache.maven.wagon/wagon-provider-api/2.7) - (Apache 2.0) Maven Wagon HTTP Lightweight 1.0 (org.apache.maven.wagon:wagon-http-lightweight:2.7 - https://mvnrepository.com/artifact/org.apache.maven.wagon/wagon-http-lightweight/2.7) - (Apache 2.0) Maven Wagon HTTP 1.0 (org.apache.maven.wagon:wagon-http:2.7 - https://mvnrepository.com/artifact/org.apache.maven.wagon/wagon-http/2.7) - (Apache 2.0) Maven Wagon HTTP Shared 1.0 (org.apache.maven.wagon:wagon-http-shared:2.7 - https://mvnrepository.com/artifact/org.apache.maven.wagon/wagon-http-shared/2.7) + (Apache 2.0) Maven Plugin API 3.6.3 (org.apache.maven:maven-plugin-api:3.6.3 - https://github.com/apache/maven) + (Apache 2.0) Maven Artifact 3.6.3 (org.apache.maven:maven-artifact:3.6.3 - https://github.com/apache/maven) + (Apache 2.0) Maven Model Builder 3.6.3 (org.apache.maven:maven-model-builder:3.6.3 - https://github.com/apache/maven) + (Apache 2.0) Maven Repository Metadata Model 3.6.3 (org.apache.maven:maven-repository-metadata:3.6.3 - https://github.com/apache/maven) + (Apache 2.0) Maven Resolver Provider Metadata 3.6.3 (org.apache.maven:maven-resolver-provider:3.6.3 - https://github.com/apache/maven) + (Apache 2.0) Maven Artifact Resolver Connector Basic 1.4.1 (org.apache.maven.resolver:maven-resolver-connector-basic:1.4.1 - https://github.com/apache/maven-resolver) + (Apache 2.0) Maven Artifact Resolver Transport File 1.4.1 (org.apache.maven.resolver:maven-resolver-transport-file:1.4.1 - https://github.com/apache/maven-resolver) + (Apache 2.0) Maven Artifact Resolver Transport HTTP 1.4.1 (org.apache.maven.resolver:maven-resolver-transport-http:1.4.1 - https://github.com/apache/maven-resolver) (Apache 2.0) Scalatest 2.2.4 (org.scalatest:scalatest_2.10:2.2.4 - https://github.com/scalatest/scalatest) (Apache 2.0) frontend-maven-plugin 1.3 (com.github.eirslett:frontend-maven-plugin:1.3 - https://github.com/eirslett/frontend-maven-plugin/blob/frontend-plugins-1.3/LICENSE (Apache 2.0) frontend-plugin-core 1.3 (com.github.eirslett:frontend-plugin-core) - https://github.com/eirslett/frontend-maven-plugin/blob/frontend-plugins-1.3/LICENSE @@ -377,12 +376,10 @@ EPL license The following components are provided under the EPL License. - (EPL 1.0) Aether (org.sonatype.aether - http://www.eclipse.org/aether/) (EPL 1.0) JDT Annotations For Enhanced Null Analysis (org.eclipse.jdt:org.eclipse.jdt.annotation:1.1.0 - https://repo.eclipse.org/content/repositories/eclipse-releases/org/eclipse/jdt/org.eclipse.jdt.annotation) (EPL 1.0) JRuby (org.jruby.jruby-complete:v1.6.8 - http://www.jruby.org/) - (EPL 1.0) Sisu Inject Plexus 2.2.2 (org.sonatype.sisu:sisu-inject-plexus:2.2.2 - https://github.com/sonatype/sisu) - (EPL 1.0) Sisu Inject Bean 2.2.2 (org.sonatype.sisu:sisu-inject-bean:2.2.2 - https://github.com/sonatype/sisu) - (EPL 1.0) Sisu Inject Guice (org.sonatype.sisu:sisu-inject-guice:no_aop- https://github.com/sonatype/sisu) + (EPL 1.0) Sisu Plexus 0.3.4 (org.eclipse.sisu:org.eclipse.sisu.plexus:0.3.4 - https://www.eclipse.org/sisu/) + (EPL 1.0) Sisu Inject 0.3.4 (org.eclipse.sisu:org.eclipse.sisu.inject:0.3.4 - https://www.eclipse.org/sisu/) (EPL 1.0) JUnit 4.12 (junit:junit:4.12 - https://github.com/junit-team/junit4) diff --git a/zeppelin-interpreter-integration/pom.xml b/zeppelin-interpreter-integration/pom.xml index 6bb3c7e..80eee4a 100644 --- a/zeppelin-interpreter-integration/pom.xml +++ b/zeppelin-interpreter-integration/pom.xml @@ -88,7 +88,7 @@ <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-model</artifactId> - <version>3.0.3</version> + <version>${maven.version}</version> <exclusions> <exclusion> <groupId>org.codehaus.plexus</groupId> diff --git a/zeppelin-interpreter/pom.xml b/zeppelin-interpreter/pom.xml index 93925ba..0f83831 100644 --- a/zeppelin-interpreter/pom.xml +++ b/zeppelin-interpreter/pom.xml @@ -38,10 +38,9 @@ <properties> <!--library versions--> <commons.pool2.version>2.3</commons.pool2.version> - <maven.plugin.api.version>3.0</maven.plugin.api.version> - <aether.version>1.12</aether.version> - <maven.aeither.provider.version>3.0.3</maven.aeither.provider.version> - <wagon.version>2.7</wagon.version> + <maven.resolver.version>1.4.1</maven.resolver.version> + <!-- must match with maven version --> + <sisu.plexus.version>0.3.4</sisu.plexus.version> <jline.version>2.14.3</jline.version> <atomix.version>3.0.0-rc4</atomix.version> @@ -135,66 +134,24 @@ <artifactId>jcl-over-slf4j</artifactId> </dependency> - <!-- Aether :: maven dependency resolution --> + <!-- maven dependency resolution --> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> - <version>${maven.plugin.api.version}</version> - <exclusions> - <exclusion> - <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-utils</artifactId> - </exclusion> - <exclusion> - <groupId>org.sonatype.sisu</groupId> - <artifactId>sisu-inject-plexus</artifactId> - </exclusion> - <exclusion> - <groupId>org.apache.maven</groupId> - <artifactId>maven-model</artifactId> - </exclusion> - </exclusions> - </dependency> - - <dependency> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-api</artifactId> - <version>${aether.version}</version> + <version>${maven.version}</version> </dependency> <dependency> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-util</artifactId> - <version>${aether.version}</version> - </dependency> - - <dependency> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-impl</artifactId> - <version>${aether.version}</version> - </dependency> - - <dependency> - <groupId>org.apache.maven</groupId> - <artifactId>maven-aether-provider</artifactId> - <version>${maven.aeither.provider.version}</version> + <groupId>org.eclipse.sisu</groupId> + <artifactId>org.eclipse.sisu.plexus</artifactId> + <version>${sisu.plexus.version}</version> <exclusions> + <!-- part of maven-plugin-api --> <exclusion> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-api</artifactId> - </exclusion> - <exclusion> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-spi</artifactId> - </exclusion> - <exclusion> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-util</artifactId> - </exclusion> - <exclusion> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-impl</artifactId> + <groupId>org.codehaus.plexus</groupId> + <artifactId>plexus-classworlds</artifactId> </exclusion> + <!-- part of maven-plugin-api --> <exclusion> <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-utils</artifactId> @@ -203,58 +160,27 @@ </dependency> <dependency> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-connector-file</artifactId> - <version>${aether.version}</version> - </dependency> - - <dependency> - <groupId>org.sonatype.aether</groupId> - <artifactId>aether-connector-wagon</artifactId> - <version>${aether.version}</version> - <exclusions> - <exclusion> - <groupId>org.apache.maven.wagon</groupId> - <artifactId>wagon-provider-api</artifactId> - </exclusion> - </exclusions> + <groupId>org.apache.maven</groupId> + <artifactId>maven-resolver-provider</artifactId> + <version>${maven.version}</version> </dependency> <dependency> - <groupId>org.apache.maven.wagon</groupId> - <artifactId>wagon-provider-api</artifactId> - <version>${wagon.version}</version> - <exclusions> - <exclusion> - <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-utils</artifactId> - </exclusion> - </exclusions> + <groupId>org.apache.maven.resolver</groupId> + <artifactId>maven-resolver-connector-basic</artifactId> + <version>${maven.resolver.version}</version> </dependency> <dependency> - <groupId>org.apache.maven.wagon</groupId> - <artifactId>wagon-http-lightweight</artifactId> - <version>${wagon.version}</version> - <exclusions> - <exclusion> - <groupId>org.apache.maven.wagon</groupId> - <artifactId>wagon-http-shared</artifactId> - </exclusion> - </exclusions> + <groupId>org.apache.maven.resolver</groupId> + <artifactId>maven-resolver-transport-file</artifactId> + <version>${maven.resolver.version}</version> </dependency> <dependency> - <groupId>org.apache.maven.wagon</groupId> - <artifactId>wagon-http</artifactId> - <version>${wagon.version}</version> - <exclusions> - <!-- using jcl-over-slf4j instead --> - <exclusion> - <groupId>commons-logging</groupId> - <artifactId>commons-logging</artifactId> - </exclusion> - </exclusions> + <groupId>org.apache.maven.resolver</groupId> + <artifactId>maven-resolver-transport-http</artifactId> + <version>${maven.resolver.version}</version> </dependency> <dependency> diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/AbstractDependencyResolver.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/AbstractDependencyResolver.java index 0de790a..c678def 100644 --- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/AbstractDependencyResolver.java +++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/AbstractDependencyResolver.java @@ -17,72 +17,102 @@ package org.apache.zeppelin.dep; +import java.net.MalformedURLException; import java.net.URL; import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; import java.util.List; -import org.sonatype.aether.RepositorySystem; -import org.sonatype.aether.RepositorySystemSession; -import org.sonatype.aether.repository.Authentication; -import org.sonatype.aether.repository.Proxy; -import org.sonatype.aether.repository.RemoteRepository; -import org.sonatype.aether.repository.RepositoryPolicy; -import org.sonatype.aether.resolution.ArtifactResult; +import org.apache.zeppelin.conf.ZeppelinConfiguration; +import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.RepositorySystemSession; +import org.eclipse.aether.repository.Authentication; +import org.eclipse.aether.repository.Proxy; +import org.eclipse.aether.repository.RemoteRepository; +import org.eclipse.aether.repository.RepositoryPolicy; +import org.eclipse.aether.resolution.ArtifactResult; +import org.eclipse.aether.util.repository.AuthenticationBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Abstract dependency resolver. * Add new dependencies from mvn repo (at runtime) Zeppelin. */ public abstract class AbstractDependencyResolver { + + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractDependencyResolver.class); + protected RepositorySystem system = Booter.newRepositorySystem(); protected List<RemoteRepository> repos = new LinkedList<>(); protected RepositorySystemSession session; - + private Proxy proxy = null; + public AbstractDependencyResolver(String localRepoPath) { + ZeppelinConfiguration conf = ZeppelinConfiguration.create(); + if (conf.getZeppelinProxyUrl() != null) { + try { + URL proxyUrl = new URL(conf.getZeppelinProxyUrl()); + Authentication auth = new AuthenticationBuilder().addUsername(conf.getZeppelinProxyUser()).addPassword(conf.getZeppelinProxyPassword()).build(); + proxy = new Proxy(proxyUrl.getProtocol(), proxyUrl.getHost(), proxyUrl.getPort(), auth); + } catch (MalformedURLException e) { + LOGGER.error("Proxy Url {} is not valid - skipping Proxy config", conf.getZeppelinProxyUrl(), e); + } + } session = Booter.newRepositorySystemSession(system, localRepoPath); - repos.add(Booter.newCentralRepository()); // add maven central + repos.add(Booter.newCentralRepository(proxy)); // add maven central repos.add(Booter.newLocalRepository()); } - public void setProxy(URL proxyUrl, String proxyUser, String proxyPassword) { - Authentication auth = new Authentication(proxyUser, proxyPassword); - Proxy proxy = new Proxy(proxyUrl.getProtocol(), proxyUrl.getHost(), proxyUrl.getPort(), auth); - synchronized (repos) { - for (RemoteRepository repo : repos) { - repo.setProxy(proxy); - } - } + public AbstractDependencyResolver(String localRepoPath, Proxy proxy) { + this.proxy = proxy; + session = Booter.newRepositorySystemSession(system, localRepoPath); + repos.add(Booter.newCentralRepository(proxy)); // add maven central + repos.add(Booter.newLocalRepository()); } public List<RemoteRepository> getRepos() { return this.repos; } - + public void addRepo(String id, String url, boolean snapshot) { synchronized (repos) { delRepo(id); - RemoteRepository rr = new RemoteRepository(id, "default", url); - rr.setPolicy(snapshot, new RepositoryPolicy( + RepositoryPolicy policy = new RepositoryPolicy( true, RepositoryPolicy.UPDATE_POLICY_DAILY, - RepositoryPolicy.CHECKSUM_POLICY_WARN)); - repos.add(rr); + RepositoryPolicy.CHECKSUM_POLICY_WARN); + + RemoteRepository.Builder rr = new RemoteRepository.Builder(id, "default", url); + if (snapshot) { + rr.setSnapshotPolicy(policy); + } else { + rr.setPolicy(policy); + } + + if (proxy != null) { + rr.setProxy(proxy); + } + repos.add(rr.build()); } } public void addRepo(String id, String url, boolean snapshot, Authentication auth, Proxy proxy) { synchronized (repos) { delRepo(id); - RemoteRepository rr = new RemoteRepository(id, "default", url); - rr.setPolicy(snapshot, new RepositoryPolicy( + RepositoryPolicy policy = new RepositoryPolicy( true, RepositoryPolicy.UPDATE_POLICY_DAILY, - RepositoryPolicy.CHECKSUM_POLICY_WARN)); - rr.setAuthentication(auth); - rr.setProxy(proxy); - repos.add(rr); + RepositoryPolicy.CHECKSUM_POLICY_WARN); + + RemoteRepository.Builder rr = new RemoteRepository.Builder(id, "default", url).setAuthentication(auth).setProxy(proxy); + if (snapshot) { + rr.setSnapshotPolicy(policy); + } else { + rr.setPolicy(policy); + } + repos.add(rr.build()); } } diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Booter.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Booter.java index 24b8331..0dfdf16 100644 --- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Booter.java +++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Booter.java @@ -18,22 +18,32 @@ package org.apache.zeppelin.dep; import org.apache.commons.lang3.Validate; -import org.apache.maven.repository.internal.MavenRepositorySystemSession; import org.apache.zeppelin.conf.ZeppelinConfiguration; +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.Authentication; +import org.eclipse.aether.repository.LocalRepository; +import org.eclipse.aether.repository.Proxy; +import org.eclipse.aether.repository.RemoteRepository; +import org.eclipse.aether.util.repository.AuthenticationBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.sonatype.aether.RepositorySystem; -import org.sonatype.aether.RepositorySystemSession; -import org.sonatype.aether.repository.LocalRepository; -import org.sonatype.aether.repository.RemoteRepository; +import java.net.MalformedURLException; +import java.net.URL; import java.nio.file.Paths; /** * Manage mvn repository. */ public class Booter { - private static Logger logger = LoggerFactory.getLogger(Booter.class); + private static final Logger LOGGER = LoggerFactory.getLogger(Booter.class); + + private Booter() { + // only a helper + } public static RepositorySystem newRepositorySystem() { return RepositorySystemFactory.newRepositorySystem(); @@ -43,12 +53,12 @@ public class Booter { RepositorySystem system, String localRepoPath) { Validate.notNull(localRepoPath, "localRepoPath should have a value"); - MavenRepositorySystemSession session = new MavenRepositorySystemSession(); + DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession(); LocalRepository localRepo = new LocalRepository(resolveLocalRepoPath(localRepoPath)); - session.setLocalRepositoryManager(system.newLocalRepositoryManager(localRepo)); + session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo)); - if (logger.isDebugEnabled()) { + if (LOGGER.isDebugEnabled()) { session.setTransferListener(new TransferListener()); session.setRepositoryListener(new RepositoryListener()); } @@ -72,7 +82,7 @@ public class Booter { return Paths.get(home).resolve(localRepoPath).toAbsolutePath().toString(); } - public static RemoteRepository newCentralRepository() { + public static RemoteRepository newCentralRepository(Proxy proxy) { String mvnRepo = System.getenv("ZEPPELIN_INTERPRETER_DEP_MVNREPO"); if (mvnRepo == null) { mvnRepo = ZeppelinConfiguration.create().getString( @@ -81,12 +91,15 @@ public class Booter { if (mvnRepo == null) { mvnRepo = "https://repo1.maven.org/maven2/"; } - - return new RemoteRepository("central", "default", mvnRepo); + RemoteRepository.Builder centralBuilder = new RemoteRepository.Builder("central", "default", mvnRepo); + if (proxy != null) { + centralBuilder.setProxy(proxy); + } + return centralBuilder.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/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/DependencyContext.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/DependencyContext.java deleted file mode 100644 index 9bac9e4..0000000 --- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/DependencyContext.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * 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.zeppelin.dep; - -import java.io.File; -import java.net.MalformedURLException; -import java.util.LinkedList; -import java.util.List; - -import org.sonatype.aether.RepositorySystem; -import org.sonatype.aether.RepositorySystemSession; -import org.sonatype.aether.artifact.Artifact; -import org.sonatype.aether.collection.CollectRequest; -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.DefaultArtifact; -import org.sonatype.aether.util.artifact.JavaScopes; -import org.sonatype.aether.util.filter.DependencyFilterUtils; -import org.sonatype.aether.util.filter.PatternExclusionsDependencyFilter; - - -/** - * - */ -public class DependencyContext { - List<Dependency> dependencies = new LinkedList<>(); - List<Repository> repositories = new LinkedList<>(); - - List<File> files = new LinkedList<>(); - List<File> filesDist = new LinkedList<>(); - private RepositorySystem system = Booter.newRepositorySystem(); - private RepositorySystemSession session; - private RemoteRepository mavenCentral = Booter.newCentralRepository(); - private RemoteRepository mavenLocal = Booter.newLocalRepository(); - - public DependencyContext(String localRepoPath) { - session = Booter.newRepositorySystemSession(system, localRepoPath); - } - - public Dependency load(String lib) { - Dependency dep = new Dependency(lib); - - if (dependencies.contains(dep)) { - dependencies.remove(dep); - } - dependencies.add(dep); - return dep; - } - - public Repository addRepo(String name) { - Repository rep = new Repository(name); - repositories.add(rep); - return rep; - } - - public void reset() { - dependencies = new LinkedList<>(); - repositories = new LinkedList<>(); - - files = new LinkedList<>(); - filesDist = new LinkedList<>(); - } - - - /** - * fetch all artifacts - * @return - * @throws MalformedURLException - * @throws ArtifactResolutionException - * @throws DependencyResolutionException - */ - public List<File> fetch() throws MalformedURLException, - DependencyResolutionException, ArtifactResolutionException { - - for (Dependency dep : dependencies) { - if (!dep.isLocalFsArtifact()) { - List<ArtifactResult> artifacts = fetchArtifactWithDep(dep); - for (ArtifactResult artifact : artifacts) { - if (dep.isDist()) { - filesDist.add(artifact.getArtifact().getFile()); - } - files.add(artifact.getArtifact().getFile()); - } - } else { - if (dep.isDist()) { - filesDist.add(new File(dep.getGroupArtifactVersion())); - } - files.add(new File(dep.getGroupArtifactVersion())); - } - } - - return files; - } - - private List<ArtifactResult> fetchArtifactWithDep(Dependency dep) - throws DependencyResolutionException, ArtifactResolutionException { - Artifact artifact = new DefaultArtifact(dep.getGroupArtifactVersion()); - - DependencyFilter classpathFilter = DependencyFilterUtils - .classpathFilter(JavaScopes.COMPILE); - PatternExclusionsDependencyFilter exclusionFilter = new PatternExclusionsDependencyFilter( - dep.getExclusions()); - - CollectRequest collectRequest = new CollectRequest(); - collectRequest.setRoot(new org.sonatype.aether.graph.Dependency(artifact, - JavaScopes.COMPILE)); - - collectRequest.addRepository(mavenCentral); - collectRequest.addRepository(mavenLocal); - for (Repository repo : repositories) { - RemoteRepository rr = new RemoteRepository(repo.getId(), "default", repo.getUrl()); - rr.setPolicy(repo.isSnapshot(), null); - collectRequest.addRepository(rr); - } - - DependencyRequest dependencyRequest = new DependencyRequest(collectRequest, - DependencyFilterUtils.andFilter(exclusionFilter, classpathFilter)); - - return system.resolveDependencies(session, dependencyRequest).getArtifactResults(); - } - - public List<File> getFiles() { - return files; - } - - public List<File> getFilesDist() { - return filesDist; - } -} diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/DependencyResolver.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/DependencyResolver.java index 753163c..8033bd9 100644 --- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/DependencyResolver.java +++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/DependencyResolver.java @@ -27,28 +27,29 @@ import java.util.List; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; +import org.eclipse.aether.RepositoryException; +import org.eclipse.aether.artifact.Artifact; +import org.eclipse.aether.artifact.DefaultArtifact; +import org.eclipse.aether.collection.CollectRequest; +import org.eclipse.aether.graph.Dependency; +import org.eclipse.aether.graph.DependencyFilter; +import org.eclipse.aether.repository.Proxy; +import org.eclipse.aether.repository.RemoteRepository; +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 org.eclipse.aether.util.filter.PatternExclusionsDependencyFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.sonatype.aether.RepositoryException; -import org.sonatype.aether.artifact.Artifact; -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.ArtifactResult; -import org.sonatype.aether.resolution.DependencyRequest; -import org.sonatype.aether.resolution.DependencyResolutionException; -import org.sonatype.aether.util.artifact.DefaultArtifact; -import org.sonatype.aether.util.artifact.JavaScopes; -import org.sonatype.aether.util.filter.DependencyFilterUtils; -import org.sonatype.aether.util.filter.PatternExclusionsDependencyFilter; /** * Deps resolver. * Add new dependencies from mvn repo (at runtime) to Zeppelin. */ public class DependencyResolver extends AbstractDependencyResolver { - private Logger logger = LoggerFactory.getLogger(DependencyResolver.class); + private static final Logger LOGGER = LoggerFactory.getLogger(DependencyResolver.class); private final String[] exclusions = new String[] {"org.apache.zeppelin:zeppelin-zengine", "org.apache.zeppelin:zeppelin-interpreter", @@ -58,13 +59,17 @@ public class DependencyResolver extends AbstractDependencyResolver { super(localRepoPath); } + public DependencyResolver(String localRepoPath, Proxy proxy) { + super(localRepoPath, proxy); + } + public List<File> load(String artifact) - throws RepositoryException, IOException { - return load(artifact, new LinkedList<String>()); + throws RepositoryException { + return load(artifact, new LinkedList<>()); } - + public synchronized List<File> load(String artifact, Collection<String> excludes) - throws RepositoryException, IOException { + throws RepositoryException { if (StringUtils.isBlank(artifact)) { // Skip dependency loading if artifact is empty return new LinkedList<>(); @@ -82,7 +87,7 @@ public class DependencyResolver extends AbstractDependencyResolver { } public List<File> load(String artifact, File destPath) throws IOException, RepositoryException { - return load(artifact, new LinkedList<String>(), destPath); + return load(artifact, new LinkedList<>(), destPath); } public List<File> load(String artifact, Collection<String> excludes, File destPath) @@ -96,7 +101,7 @@ public class DependencyResolver extends AbstractDependencyResolver { File destFile = new File(destPath, srcFile.getName()); if (!destFile.exists() || !FileUtils.contentEquals(srcFile, destFile)) { FileUtils.copyFile(srcFile, destFile); - logger.debug("copy {} to {}", srcFile.getAbsolutePath(), destPath); + LOGGER.debug("copy {} to {}", srcFile.getAbsolutePath(), destPath); } } } @@ -114,7 +119,7 @@ public class DependencyResolver extends AbstractDependencyResolver { if (!destFile.exists() || !FileUtils.contentEquals(srcFile, destFile)) { FileUtils.copyFile(srcFile, destFile); - logger.debug("copy {} to {}", srcFile.getAbsolutePath(), destPath); + LOGGER.debug("copy {} to {}", srcFile.getAbsolutePath(), destPath); } } @@ -142,7 +147,7 @@ public class DependencyResolver extends AbstractDependencyResolver { List<File> files = new LinkedList<>(); for (ArtifactResult artifactResult : listOfArtifact) { files.add(artifactResult.getArtifact().getFile()); - logger.debug("load {}", artifactResult.getArtifact().getFile().getAbsolutePath()); + LOGGER.debug("load {}", artifactResult.getArtifact().getFile().getAbsolutePath()); } return files; diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Repository.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Repository.java index 1524e08..83c6aaa 100644 --- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Repository.java +++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Repository.java @@ -18,10 +18,12 @@ package org.apache.zeppelin.dep; import static org.apache.commons.lang3.StringUtils.isNotBlank; + import com.google.gson.Gson; import org.apache.zeppelin.common.JsonSerializable; -import org.sonatype.aether.repository.Authentication; -import org.sonatype.aether.repository.Proxy; +import org.eclipse.aether.repository.Authentication; +import org.eclipse.aether.repository.Proxy; +import org.eclipse.aether.util.repository.AuthenticationBuilder; /** * @@ -86,7 +88,7 @@ public class Repository implements JsonSerializable { public Authentication getAuthentication() { Authentication auth = null; if (this.username != null && this.password != null) { - auth = new Authentication(this.username, this.password); + auth = new AuthenticationBuilder().addUsername(this.username).addPassword(this.password).build(); } return auth; } @@ -95,7 +97,7 @@ public class Repository implements JsonSerializable { if (isNotBlank(proxyHost) && proxyPort != null) { if (isNotBlank(proxyLogin)) { return new Proxy(proxyProtocol, proxyHost, proxyPort, - new Authentication(proxyLogin, proxyPassword)); + new AuthenticationBuilder().addUsername(proxyLogin).addPassword(proxyPassword).build()); } else { return new Proxy(proxyProtocol, proxyHost, proxyPort, null); } diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/RepositoryListener.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/RepositoryListener.java index 9f62d5f..01062bf 100644 --- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/RepositoryListener.java +++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/RepositoryListener.java @@ -17,10 +17,10 @@ package org.apache.zeppelin.dep; +import org.eclipse.aether.AbstractRepositoryListener; +import org.eclipse.aether.RepositoryEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.sonatype.aether.AbstractRepositoryListener; -import org.sonatype.aether.RepositoryEvent; /** * Simple listener that print log. diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/RepositorySystemFactory.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/RepositorySystemFactory.java index 9529698..ae353f2 100644 --- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/RepositorySystemFactory.java +++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/RepositorySystemFactory.java @@ -17,53 +17,37 @@ package org.apache.zeppelin.dep; -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.apache.maven.wagon.providers.http.LightweightHttpWagonAuthenticator; -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.impl.DefaultServiceLocator; +import org.apache.maven.repository.internal.MavenRepositorySystemUtils; +import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory; +import org.eclipse.aether.spi.connector.RepositoryConnectorFactory; +import org.eclipse.aether.spi.connector.transport.TransporterFactory; +import org.eclipse.aether.transport.file.FileTransporterFactory; +import org.eclipse.aether.transport.http.HttpTransporterFactory; + /** * 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)) { - LightweightHttpWagon lightweightHttpWagon = new LightweightHttpWagon(); - lightweightHttpWagon.setAuthenticator(new LightweightHttpWagonAuthenticator()); - return lightweightHttpWagon; - } - - if ("https".equals(roleHint)) { - return new HttpWagon(); - } - - return null; - } - - @Override - public void release(Wagon arg0) { - + 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(); + } + } ); + RepositorySystem system = locator.getService(RepositorySystem.class); + if (system == null) { + throw new RuntimeException(); } + return system; } } diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/TransferListener.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/TransferListener.java index 7f25e3b..1162747 100644 --- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/TransferListener.java +++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/TransferListener.java @@ -23,11 +23,11 @@ import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import org.eclipse.aether.transfer.AbstractTransferListener; +import org.eclipse.aether.transfer.TransferEvent; +import org.eclipse.aether.transfer.TransferResource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.sonatype.aether.transfer.AbstractTransferListener; -import org.sonatype.aether.transfer.TransferEvent; -import org.sonatype.aether.transfer.TransferResource; /** * Simple listener that show deps downloading progress. diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java index ebdf815..4051dac 100644 --- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java +++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java @@ -144,7 +144,7 @@ public class RemoteInterpreterServer extends Thread private ScheduledExecutorService resultCleanService = Executors.newSingleThreadScheduledExecutor(); private boolean isTest; - + private ZeppelinConfiguration zConf; // cluster manager client private ClusterManagerClient clusterManagerClient; diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/dep/DependencyResolverTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/dep/DependencyResolverTest.java index 96f223c..ceeecd9 100644 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/dep/DependencyResolverTest.java +++ b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/dep/DependencyResolverTest.java @@ -23,7 +23,7 @@ import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.sonatype.aether.RepositoryException; +import org.eclipse.aether.RepositoryException; import java.io.File; import java.io.FileNotFoundException; diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/InterpreterRestApi.java b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/InterpreterRestApi.java index 7b12312..de11e35 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/InterpreterRestApi.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/InterpreterRestApi.java @@ -43,7 +43,7 @@ import org.apache.zeppelin.service.SimpleServiceCallback; import org.apache.zeppelin.socket.NotebookServer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.sonatype.aether.repository.RemoteRepository; +import org.eclipse.aether.repository.RemoteRepository; import javax.validation.constraints.NotNull; import javax.ws.rs.DELETE; diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/service/InterpreterService.java b/zeppelin-server/src/main/java/org/apache/zeppelin/service/InterpreterService.java index ff897f5..7214815 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/service/InterpreterService.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/service/InterpreterService.java @@ -20,8 +20,6 @@ package org.apache.zeppelin.service; import com.google.common.collect.Lists; import com.google.common.util.concurrent.ThreadFactoryBuilder; import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -37,7 +35,7 @@ import org.apache.zeppelin.interpreter.InterpreterSettingManager; import org.apache.zeppelin.rest.message.InterpreterInstallationRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.sonatype.aether.RepositoryException; +import org.eclipse.aether.RepositoryException; /** * This class handles all of business logic for {@link org.apache.zeppelin.rest.InterpreterRestApi} @@ -75,18 +73,6 @@ public class InterpreterService { final DependencyResolver dependencyResolver = new DependencyResolver(localRepoPath); - String proxyUrl = conf.getZeppelinProxyUrl(); - if (null != proxyUrl) { - String proxyUser = conf.getZeppelinProxyUser(); - String proxyPassword = conf.getZeppelinProxyPassword(); - try { - dependencyResolver.setProxy(new URL(proxyUrl), proxyUser, proxyPassword); - } catch (MalformedURLException e) { - // TODO(jl): Not sure if it's good to raise an exception - throw new Exception("Url is not valid format", e); - } - } - // TODO(jl): Make a rule between an interpreter name and an installation directory List<String> possibleInterpreterDirectories = Lists.newArrayList(); possibleInterpreterDirectories.add(interpreterName); diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/service/InterpreterServiceTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/service/InterpreterServiceTest.java index cc4b1df..5c60366 100644 --- a/zeppelin-server/src/test/java/org/apache/zeppelin/service/InterpreterServiceTest.java +++ b/zeppelin-server/src/test/java/org/apache/zeppelin/service/InterpreterServiceTest.java @@ -77,14 +77,6 @@ public class InterpreterServiceTest { } @Test(expected = Exception.class) - public void invalidProxyUrl() throws Exception { - when(mockZeppelinConfiguration.getZeppelinProxyUrl()).thenReturn("invalidProxyPath"); - - interpreterService.installInterpreter( - new InterpreterInstallationRequest("name", "artifact"), null); - } - - @Test(expected = Exception.class) public void interpreterAlreadyExist() throws Exception { String alreadyExistName = "aen"; Path specificInterpreterDir = diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfoSaving.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfoSaving.java index cc1c22d..cb7e703 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfoSaving.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfoSaving.java @@ -26,7 +26,7 @@ import org.apache.commons.io.IOUtils; import org.apache.zeppelin.common.JsonSerializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.sonatype.aether.repository.RemoteRepository; +import org.eclipse.aether.repository.RemoteRepository; import java.io.BufferedReader; import java.io.FileOutputStream; diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java index 2affa5e..3977573 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java @@ -68,9 +68,9 @@ import org.eclipse.jetty.util.annotation.ManagedAttribute; import org.eclipse.jetty.util.annotation.ManagedObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.sonatype.aether.repository.Proxy; -import org.sonatype.aether.repository.RemoteRepository; -import org.sonatype.aether.repository.Authentication; +import org.eclipse.aether.repository.Proxy; +import org.eclipse.aether.repository.RemoteRepository; +import org.eclipse.aether.repository.Authentication; import java.io.File; import java.io.FileInputStream; diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/install/InstallInterpreter.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/install/InstallInterpreter.java index 0817595..13ecb3f 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/install/InstallInterpreter.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/install/InstallInterpreter.java @@ -20,7 +20,10 @@ import org.apache.commons.io.FileUtils; import org.apache.zeppelin.conf.ZeppelinConfiguration; import org.apache.zeppelin.dep.DependencyResolver; import org.apache.zeppelin.util.Util; -import org.sonatype.aether.RepositoryException; +import org.eclipse.aether.repository.Authentication; +import org.eclipse.aether.repository.Proxy; +import org.eclipse.aether.util.repository.AuthenticationBuilder; +import org.eclipse.aether.RepositoryException; import java.io.File; import java.io.IOException; @@ -150,10 +153,12 @@ public class InstallInterpreter { } public void install(String name, String artifact) { - DependencyResolver depResolver = new DependencyResolver(localRepoDir); + Proxy proxy = null; if (proxyUrl != null) { - depResolver.setProxy(proxyUrl, proxyUser, proxyPassword); + Authentication auth = new AuthenticationBuilder().addUsername(proxyUser).addPassword(proxyPassword).build(); + proxy = new Proxy(proxyUrl.getProtocol(), proxyUrl.getHost(), proxyUrl.getPort(), auth); } + DependencyResolver depResolver = new DependencyResolver(localRepoDir, proxy); File installDir = new File(interpreterBaseDir, name); if (installDir.exists()) { diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingManagerTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingManagerTest.java index 2473977..167cb0f 100644 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingManagerTest.java +++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingManagerTest.java @@ -24,8 +24,8 @@ import org.apache.zeppelin.display.AngularObjectRegistryListener; import org.apache.zeppelin.helium.ApplicationEventListener; import org.apache.zeppelin.interpreter.remote.RemoteInterpreterProcessListener; import org.junit.Test; -import org.sonatype.aether.RepositoryException; -import org.sonatype.aether.repository.RemoteRepository; +import org.eclipse.aether.RepositoryException; +import org.eclipse.aether.repository.RemoteRepository; import java.io.IOException; import java.util.ArrayList; diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroupTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroupTest.java index 890bed9..974ddc2 100644 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroupTest.java +++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/ManagedInterpreterGroupTest.java @@ -21,7 +21,7 @@ import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.sonatype.aether.RepositoryException; +import org.eclipse.aether.RepositoryException; import java.io.IOException; import java.util.ArrayList; diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java index a6d647f..20056ec 100644 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java +++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java @@ -47,7 +47,7 @@ import org.junit.Test; import org.quartz.SchedulerException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.sonatype.aether.RepositoryException; +import org.eclipse.aether.RepositoryException; import java.io.File; import java.io.IOException;