This is an automated email from the ASF dual-hosted git repository.

zjffdu 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 f33accd  [ZEPPELIN-5545] Support multiple maven repo in 
zeppelin.interpreter.d…
f33accd is described below

commit f33accd6190f046f16c5578ff6532c99a27ea8ce
Author: huage1994 <guanhua...@foxmail.com>
AuthorDate: Sat Oct 2 23:02:55 2021 +0800

    [ZEPPELIN-5545] Support multiple maven repo in zeppelin.interpreter.d…
    
    ### What is this PR for?
    Support multiple maven repo in config item  zeppelin.interpreter.dep.mvnRepo
    
    ### What type of PR is it?
    [Improvement]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/browse/ZEPPELIN-5545
    
    ### How should this be tested?
    CI pass
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Author: huage1994 <guanhua...@foxmail.com>
    
    Closes #4239 from huage1994/ZEPPELIN-5545 and squashes the following 
commits:
    
    fc5d917925 [huage1994]  [ZEPPELIN-5545] add a test for 
zeppelin.interpreter.dep.mvnRepo
    9161170094 [huage1994] document update for zeppelin.interpreter.dep.mvnRepo
    b075e3f5ca [huage1994] rename method name `newCentralRepositorie` to 
`newCentralRepositories`
    2b14eef46a [huage1994] [ZEPPELIN-5545] Support multiple maven repo in 
zeppelin.interpreter.dep.mvnRepo
---
 docs/setup/operation/configuration.md              |  2 +-
 .../zeppelin/dep/AbstractDependencyResolver.java   |  4 +--
 .../main/java/org/apache/zeppelin/dep/Booter.java  | 36 ++++++++++++++++------
 .../java/org/apache/zeppelin/dep/BooterTest.java   | 17 ++++++++++
 .../src/test/resources/zeppelin-site-test.xml      |  6 ++++
 5 files changed, 52 insertions(+), 13 deletions(-)

diff --git a/docs/setup/operation/configuration.md 
b/docs/setup/operation/configuration.md
index 9e12345..5627cdd 100644
--- a/docs/setup/operation/configuration.md
+++ b/docs/setup/operation/configuration.md
@@ -328,7 +328,7 @@ Sources descending by priority:
   <tr>
     <td><h6 class="properties">ZEPPELIN_INTERPRETER_DEP_MVNREPO</h6></td>
     <td><h6 class="properties">zeppelin.interpreter.dep.mvnRepo</h6></td>
-    <td>https://repo1.maven.org/maven2/</td>
+    <td>https://repo1.maven.org/maven2/,https://repo2.maven.org/maven2/</td>
     <td>Remote principal repository for interpreter's additional dependency 
loading</td>
   </tr>
   <tr>
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 c678def..623dba7 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
@@ -61,14 +61,14 @@ public abstract class AbstractDependencyResolver {
       }
     }
     session = Booter.newRepositorySystemSession(system, localRepoPath);
-    repos.add(Booter.newCentralRepository(proxy)); // add maven central
+    repos.addAll(Booter.newCentralRepositorys(proxy)); // add maven central
     repos.add(Booter.newLocalRepository());
   }
 
   public AbstractDependencyResolver(String localRepoPath, Proxy proxy) {
     this.proxy = proxy;
     session = Booter.newRepositorySystemSession(system, localRepoPath);
-    repos.add(Booter.newCentralRepository(proxy)); // add maven central
+    repos.addAll(Booter.newCentralRepositorys(proxy)); // add maven central
     repos.add(Booter.newLocalRepository());
   }
 
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 bf5e1da..18cef29 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
@@ -30,6 +30,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * Manage mvn repository.
@@ -78,20 +82,32 @@ public class Booter {
     return Paths.get(home).resolve(localRepoPath).toAbsolutePath().toString();
   }
 
-  public static RemoteRepository newCentralRepository(Proxy proxy) {
-    String mvnRepo = System.getenv("ZEPPELIN_INTERPRETER_DEP_MVNREPO");
-    if (mvnRepo == null) {
-      mvnRepo = ZeppelinConfiguration.create().getString(
+  public static List<RemoteRepository> newCentralRepositorys(Proxy proxy) {
+    String mvnRepoEnv = System.getenv("ZEPPELIN_INTERPRETER_DEP_MVNREPO");
+    if (mvnRepoEnv == null) {
+      mvnRepoEnv = ZeppelinConfiguration.create().getString(
               ZeppelinConfiguration.ConfVars.ZEPPELIN_INTERPRETER_DEP_MVNREPO);
     }
-    if (mvnRepo == null) {
-      mvnRepo = "https://repo1.maven.org/maven2/";;
+    if (mvnRepoEnv == null) {
+      mvnRepoEnv = "https://repo1.maven.org/maven2/";;
     }
-    RemoteRepository.Builder centralBuilder = new 
RemoteRepository.Builder("central", "default", mvnRepo);
-    if (proxy != null) {
-      centralBuilder.setProxy(proxy);
+
+    List<String> repoList = new ArrayList<>();
+    if (mvnRepoEnv.contains(",")) {
+      repoList.addAll(Arrays.asList(mvnRepoEnv.split(",+")));
+    } else {
+      repoList.add(mvnRepoEnv);
     }
-    return centralBuilder.build();
+
+    List<RemoteRepository> centralRepositorys = repoList.stream().map(repo -> {
+              RemoteRepository.Builder centralBuilder = new 
RemoteRepository.Builder("central", "default", repo);
+              if (proxy != null) {
+                centralBuilder.setProxy(proxy);
+              }
+              return centralBuilder.build();
+            }
+    ).collect(Collectors.toList());
+    return centralRepositorys;
   }
 
   public static RemoteRepository newLocalRepository() {
diff --git 
a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/dep/BooterTest.java 
b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/dep/BooterTest.java
index ffc3c8f..21a8d1a 100644
--- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/dep/BooterTest.java
+++ b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/dep/BooterTest.java
@@ -17,13 +17,19 @@
 
 package org.apache.zeppelin.dep;
 
+import org.apache.zeppelin.conf.ZeppelinConfiguration;
+import org.eclipse.aether.repository.RemoteRepository;
 import org.junit.Test;
 
 import java.nio.file.Paths;
+import java.util.List;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
 
 public class BooterTest {
 
@@ -46,4 +52,15 @@ public class BooterTest {
   public void should_throw_exception_for_null() {
     Booter.resolveLocalRepoPath(null);
   }
+
+  @Test
+  public void getInterpreterMvnRepoPathTest() {
+    ZeppelinConfiguration.reset();
+    ZeppelinConfiguration.create("zeppelin-site-test.xml");
+    List<RemoteRepository> remoteRepositories = 
Booter.newCentralRepositorys(null);
+    assertNotNull(remoteRepositories);
+    assertEquals(2, remoteRepositories.size());
+    assertEquals("https://repo1.maven.org/maven2/";, 
remoteRepositories.get(0).getUrl());
+    assertEquals("https://repo2.maven.org/maven2/";, 
remoteRepositories.get(1).getUrl());
+  }
 }
diff --git a/zeppelin-interpreter/src/test/resources/zeppelin-site-test.xml 
b/zeppelin-interpreter/src/test/resources/zeppelin-site-test.xml
index 2499e44..55ee1d0 100644
--- a/zeppelin-interpreter/src/test/resources/zeppelin-site-test.xml
+++ b/zeppelin-interpreter/src/test/resources/zeppelin-site-test.xml
@@ -35,4 +35,10 @@
         <value>8080</value>
         <description>Server port.</description>
     </property>
+
+    <property>
+        <name>zeppelin.interpreter.dep.mvnRepo</name>
+        
<value>https://repo1.maven.org/maven2/,https://repo2.maven.org/maven2/</value>
+        <description>depended mvn repos</description>
+    </property>
 </configuration>

Reply via email to