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

benjobs pushed a commit to branch dev-2.1.2
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git


The following commit(s) were added to refs/heads/dev-2.1.2 by this push:
     new e662e4741 [Improve] FE job dependency component improvements (#3373)
e662e4741 is described below

commit e662e47418f5b20c9fcbd86939132194ec77e76e
Author: benjobs <[email protected]>
AuthorDate: Sun Dec 3 20:30:25 2023 +0800

    [Improve] FE job dependency component improvements (#3373)
    
    * [Improve] FE job dependency component improvements
    
    * [Improve] MavenTool support mirror|proxy
    
    * [Improve] FE dependency component get latest value bug fixed
    
    * [Improve] resolve maven artifacts bug fixed.
    
    ---------
    
    Co-authored-by: benjobs <[email protected]>
---
 .mvn/wrapper/MavenWrapperHelper.java               |  2 +-
 .../console/core/entity/Application.java           |  6 ++
 .../core/service/impl/AppBuildPipeServiceImpl.java | 14 ++++-
 .../core/service/impl/ApplicationServiceImpl.java  |  2 +-
 .../src/views/flink/app/Add.vue                    |  7 ++-
 .../src/views/flink/app/EditFlink.vue              |  6 +-
 .../src/views/flink/app/EditStreamPark.vue         |  6 +-
 .../src/views/flink/app/components/Dependency.vue  | 10 ++--
 .../flink/app/hooks/useCreateAndEditSchema.ts      | 23 +-------
 .../src/views/flink/app/hooks/useCreateSchema.ts   |  9 +++
 .../src/views/flink/app/hooks/useEditStreamPark.ts | 14 ++++-
 .../src/views/flink/app/hooks/useFlinkRender.tsx   | 11 +++-
 .../src/views/flink/app/styles/Add.less            |  2 -
 .../streampark/flink/packer/maven/MavenTool.scala  | 69 +++++++++++++++++++---
 14 files changed, 126 insertions(+), 55 deletions(-)

diff --git a/.mvn/wrapper/MavenWrapperHelper.java 
b/.mvn/wrapper/MavenWrapperHelper.java
index 6be349789..428fa81ff 100644
--- a/.mvn/wrapper/MavenWrapperHelper.java
+++ b/.mvn/wrapper/MavenWrapperHelper.java
@@ -98,7 +98,7 @@ public final class MavenWrapperHelper {
         log(" - Downloader complete");
     }
 
-    public static String getFileMd5(String path) throws Exception {
+    private static String getFileMd5(String path) throws Exception {
         MessageDigest md5 = MessageDigest.getInstance("MD5");
         try (FileInputStream inputStream = new FileInputStream(path)) {
             byte[] buffer = new byte[1024];
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Application.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Application.java
index 1bbee1382..e375d521a 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Application.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Application.java
@@ -462,6 +462,12 @@ public class Application implements Serializable {
     return DevelopmentMode.CUSTOM_CODE.getValue().equals(this.getJobType());
   }
 
+  @JsonIgnore
+  public boolean isApacheFlinkCustomCodeJob() {
+    return DevelopmentMode.CUSTOM_CODE.getValue().equals(this.getJobType())
+        && getApplicationType() == ApplicationType.APACHE_FLINK;
+  }
+
   @JsonIgnore
   public boolean isUploadJob() {
     return isCustomCodeJob() && 
ResourceFrom.UPLOAD.getValue().equals(this.getResourceFrom());
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
index 59c0e108f..f17995c14 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
@@ -378,7 +378,7 @@ public class AppBuildPipeServiceImpl
 
     FsOperator localFS = FsOperator.lfs();
     // 1. copy jar to local upload dir
-    if (app.isFlinkSqlJob() || app.isUploadJob()) {
+    if (app.isFlinkSqlJob() || app.isApacheFlinkCustomCodeJob()) {
       if (!app.getMavenDependency().getJar().isEmpty()) {
         for (String jar : app.getMavenDependency().getJar()) {
           File localJar = new File(WebUtils.getAppTempDir(), jar);
@@ -393,7 +393,7 @@ public class AppBuildPipeServiceImpl
       }
     }
 
-    if (app.isCustomCodeJob()) {
+    if (app.isApacheFlinkCustomCodeJob()) {
       // customCode upload jar to appHome...
       FsOperator fsOperator = app.getFsOperator();
       ResourceFrom resourceFrom = ResourceFrom.of(app.getResourceFrom());
@@ -437,7 +437,15 @@ public class AppBuildPipeServiceImpl
         if (!app.getMavenDependency().getPom().isEmpty()) {
           Set<Artifact> artifacts =
               app.getMavenDependency().getPom().stream()
-                  .filter(x -> !new File(localUploadDIR, 
x.artifactName()).exists())
+                  .filter(
+                      dep -> {
+                        File file = new File(localUploadDIR, 
dep.artifactName());
+                        if (file.exists()) {
+                          dependencyJars.add(file);
+                          return false;
+                        }
+                        return true;
+                      })
                   .map(
                       pom ->
                           new Artifact(
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ApplicationServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ApplicationServiceImpl.java
index 0d1d45785..8b8b5b53b 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ApplicationServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ApplicationServiceImpl.java
@@ -852,7 +852,7 @@ public class ApplicationServiceImpl extends 
ServiceImpl<ApplicationMapper, Appli
 
     application.setRelease(ReleaseState.NEED_RELEASE.get());
 
-    if (application.isUploadJob()) {
+    if (application.isApacheFlinkCustomCodeJob()) {
       MavenDependency thisDependency = 
MavenDependency.of(appParam.getDependency());
       MavenDependency targetDependency = 
MavenDependency.of(application.getDependency());
 
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/Add.vue 
b/streampark-console/streampark-console-webapp/src/views/flink/app/Add.vue
index 071231e0c..f23aa06e3 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/Add.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/Add.vue
@@ -201,8 +201,9 @@
         } else {
           params['jar'] = values.jar || null;
           params['mainClass'] = values.mainClass || null;
+          params['dependency'] = await getDependency();
         }
-        handleCreateApp(params);
+        await handleCreateApp(params);
       } else {
         // from upload
         Object.assign(params, {
@@ -212,13 +213,13 @@
           mainClass: values.mainClass,
           dependency: await getDependency(),
         });
-        handleCreateApp(params);
+        await handleCreateApp(params);
       }
     }
   }
   async function getDependency() {
     // Trigger a pom confirmation operation.
-    unref(dependencyRef)?.handleApplyPom();
+    await unref(dependencyRef)?.handleApplyPom();
     // common params...
     const dependency: { pom?: string; jar?: string } = {};
     const dependencyRecords = unref(dependencyRef)?.dependencyRecords;
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/EditFlink.vue
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/EditFlink.vue
index e75e0d544..31a6e3208 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/EditFlink.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/EditFlink.vue
@@ -144,9 +144,9 @@
   }
 
   /* Handling update parameters */
-  function handleAppUpdate(values: Recordable) {
+  async function handleAppUpdate(values: Recordable) {
     // Trigger a pom confirmation operation.
-    unref(dependencyRef)?.handleApplyPom();
+    await unref(dependencyRef)?.handleApplyPom();
     // common params...
     const dependency: { pom?: string; jar?: string } = {};
     const dependencyRecords = unref(dependencyRef)?.dependencyRecords;
@@ -173,7 +173,7 @@
             : JSON.stringify(dependency),
       };
       handleSubmitParams(params, values, k8sTemplate);
-      handleUpdateApp(params);
+      await handleUpdateApp(params);
     } catch (error) {
       submitLoading.value = false;
     }
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/EditStreamPark.vue
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/EditStreamPark.vue
index 9e307ea24..c6f9197b0 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/EditStreamPark.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/EditStreamPark.vue
@@ -176,10 +176,10 @@
     }
   }
 
-  function handleSubmitSQL(values: Recordable) {
+  async function handleSubmitSQL(values: Recordable) {
     try {
       // Trigger a pom confirmation operation.
-      unref(dependencyRef)?.handleApplyPom();
+      await unref(dependencyRef)?.handleApplyPom();
       // common params...
       const dependency: { pom?: string; jar?: string } = {};
       const dependencyRecords = unref(dependencyRef)?.dependencyRecords;
@@ -212,7 +212,7 @@
             : JSON.stringify(dependency),
       };
       handleSubmitParams(params, values, k8sTemplate);
-      handleUpdateApp(params);
+      await handleUpdateApp(params);
     } catch (error) {
       createMessage.error('edit error');
       submitLoading.value = false;
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/components/Dependency.vue
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/components/Dependency.vue
index 5c9686a45..f3c1b4c37 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/components/Dependency.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/components/Dependency.vue
@@ -75,7 +75,7 @@
   const { t } = useI18n();
   const defaultValue = '';
   const { Swal } = useMessage();
-  const { onChange, setContent } = useMonaco(pomBox, {
+  const { onChange, setContent, getContent } = useMonaco(pomBox, {
     language: 'xml',
     code: props.value || defaultValue,
     options: {
@@ -106,7 +106,8 @@
     const classifierExp = /<classifier>([\s\S]*?)<\/classifier>/;
     const exclusionsExp = /<exclusions>([\s\S]*?)<\/exclusions>/;
     const invalidArtifact: Array<string> = [];
-    props.value
+    const propsValue = await getContent();
+    propsValue
       .split('</dependency>')
       .filter((x) => x.replace(/\\s+/, '') !== '')
       .forEach((dep) => {
@@ -217,8 +218,7 @@
   /* load history config records */
   async function handleReloadHistoryUploads() {
     selectedHistoryUploadJars.value = [];
-    const res = await fetchUploadJars();
-    historyUploadJars.value = res;
+    historyUploadJars.value = await fetchUploadJars();
   }
 
   const filteredHistoryUploadJarsOptions = computed(() => {
@@ -291,7 +291,7 @@
   <Tabs type="card" v-model:activeKey="activeTab" class="pom-card">
     <TabPane key="pom" tab="Maven pom">
       <div class="relative">
-        <div ref="pomBox" class="pom-box syntax-true" style="height: 
300px"></div>
+        <div ref="pomBox" class="pom-box syntax-true" style="height: 
330px"></div>
         <a-button type="primary" class="apply-pom" @click="handleApplyPom()">
           {{ t('common.apply') }}
         </a-button>
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateAndEditSchema.ts
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateAndEditSchema.ts
index 2a1a3b915..8a6942398 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateAndEditSchema.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateAndEditSchema.ts
@@ -49,13 +49,7 @@ import { fetchFlinkEnv } from 
'/@/api/flink/setting/flinkEnv';
 import { FlinkEnv } from '/@/api/flink/setting/types/flinkEnv.type';
 import { AlertSetting } from '/@/api/flink/setting/types/alert.type';
 import { FlinkCluster } from '/@/api/flink/setting/types/flinkCluster.type';
-import {
-  AppTypeEnum,
-  ClusterStateEnum,
-  ExecModeEnum,
-  JobTypeEnum,
-  ResourceFromEnum,
-} from '/@/enums/flinkEnum';
+import { AppTypeEnum, ClusterStateEnum, ExecModeEnum, JobTypeEnum } from 
'/@/enums/flinkEnum';
 import { isK8sExecMode } from '../utils';
 import { useI18n } from '/@/hooks/web/useI18n';
 import { fetchCheckHadoop } from '/@/api/flink/setting';
@@ -125,21 +119,6 @@ export const useCreateAndEditSchema = (
         },
         rules: [{ required: true, message: 
t('flink.app.addAppTips.flinkSqlIsRequiredMessage') }],
       },
-      {
-        field: 'dependency',
-        label: t('flink.app.dependency'),
-        component: 'Input',
-        slot: 'dependency',
-        ifShow: ({ values }) => {
-          if (edit?.appId) {
-            return values.jobType == JobTypeEnum.SQL
-              ? true
-              : values.resourceFrom == ResourceFromEnum.UPLOAD;
-          } else {
-            return values?.jobType == 'sql' ? true : values?.resourceFrom != 
'cvs';
-          }
-        },
-      },
       { field: 'configOverride', label: '', component: 'Input', show: false },
       {
         field: 'isSetConfig',
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateSchema.ts
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateSchema.ts
index 4ef2557b3..f12392303 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateSchema.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateSchema.ts
@@ -242,6 +242,15 @@ export const useCreateSchema = (dependencyRef: Ref) => {
           values.appType == String(AppTypeEnum.APACHE_FLINK),
         rules: [{ required: true, message: 
t('flink.app.addAppTips.mainClassIsRequiredMessage') }],
       },
+      {
+        field: 'dependency',
+        label: t('flink.app.dependency'),
+        component: 'Input',
+        slot: 'dependency',
+        ifShow: ({ values }) => {
+          return values?.jobType == 'sql' ? true : values?.appType == 
AppTypeEnum.APACHE_FLINK;
+        },
+      },
       {
         field: 'config',
         label: t('flink.app.appConf'),
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditStreamPark.ts
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditStreamPark.ts
index a4bb6c15f..3ad8db2cd 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditStreamPark.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useEditStreamPark.ts
@@ -16,7 +16,7 @@
  */
 import { FormSchema } from '/@/components/Table';
 import { computed, h, Ref, ref, unref } from 'vue';
-import { ExecModeEnum, JobTypeEnum, UseStrategyEnum } from 
'/@/enums/flinkEnum';
+import { AppTypeEnum, ExecModeEnum, JobTypeEnum, UseStrategyEnum } from 
'/@/enums/flinkEnum';
 import { useCreateAndEditSchema } from './useCreateAndEditSchema';
 import { renderSqlHistory } from './useFlinkRender';
 import { Alert } from 'ant-design-vue';
@@ -141,7 +141,6 @@ export const useEditStreamParkSchema = (
         ifShow: ({ model, values }) => values.jobType != JobTypeEnum.SQL && 
model.projectName,
       },
       { field: 'project', label: 'ProjectId', component: 'Input', show: false 
},
-
       {
         field: 'module',
         label: 'Application',
@@ -149,6 +148,17 @@ export const useEditStreamParkSchema = (
         render: ({ model }) => h(Alert, { message: model.module, type: 'info' 
}),
         ifShow: ({ model, values }) => values.jobType != JobTypeEnum.SQL && 
model.module,
       },
+      {
+        field: 'dependency',
+        label: t('flink.app.dependency'),
+        component: 'Input',
+        slot: 'dependency',
+        ifShow: ({ values }) => {
+          return values.jobType == JobTypeEnum.SQL
+            ? true
+            : values?.appType == AppTypeEnum.APACHE_FLINK;
+        },
+      },
       { field: 'configId', label: 'configId', component: 'Input', show: false 
},
       { field: 'config', label: '', component: 'Input', show: false },
       { field: 'strategy', label: '', component: 'Input', show: false },
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useFlinkRender.tsx
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useFlinkRender.tsx
index ba00e667a..851778227 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useFlinkRender.tsx
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useFlinkRender.tsx
@@ -39,7 +39,7 @@ import { handleConfTemplate } from '/@/api/flink/config';
 import { decodeByBase64 } from '/@/utils/cipher';
 import { useMessage } from '/@/hooks/web/useMessage';
 import { SelectValue } from 'ant-design-vue/lib/select';
-import { CandidateTypeEnum, FailoverStrategyEnum } from '/@/enums/flinkEnum';
+import { AppTypeEnum, CandidateTypeEnum, FailoverStrategyEnum } from 
'/@/enums/flinkEnum';
 import { useI18n } from '/@/hooks/web/useI18n';
 import { fetchYarnQueueList } from '/@/api/flink/setting/yarnQueue';
 import { ApiSelect } from '/@/components/Form';
@@ -507,10 +507,17 @@ export const renderCompareSelectTag = (ver: any) => {
   );
 };
 
+function handleResourceFrom(model: Recordable, value: string) {
+  model.resourceFrom = value;
+  if (value == 'upload') {
+    model.appType = String(AppTypeEnum.APACHE_FLINK);
+  }
+}
+
 export const renderResourceFrom = (model: Recordable) => {
   return (
     <Select
-      onChange={(value: string) => (model.resourceFrom = value)}
+      onChange={(value: string) => handleResourceFrom(model, value)}
       value={model.resourceFrom}
       placeholder="Please select resource from"
     >
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/styles/Add.less
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/styles/Add.less
index 10e19a1e3..5159a19b8 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/styles/Add.less
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/styles/Add.less
@@ -28,9 +28,7 @@
   }
 }
 
-.sql-box,
 .pom-box {
-  height: 550px;
   width: 100%;
   overflow: hidden;
 }
diff --git 
a/streampark-flink/streampark-flink-packer/src/main/scala/org/apache/streampark/flink/packer/maven/MavenTool.scala
 
b/streampark-flink/streampark-flink-packer/src/main/scala/org/apache/streampark/flink/packer/maven/MavenTool.scala
index 451c75dda..d2dc899b3 100644
--- 
a/streampark-flink/streampark-flink-packer/src/main/scala/org/apache/streampark/flink/packer/maven/MavenTool.scala
+++ 
b/streampark-flink/streampark-flink-packer/src/main/scala/org/apache/streampark/flink/packer/maven/MavenTool.scala
@@ -18,26 +18,29 @@
 package org.apache.streampark.flink.packer.maven
 
 import org.apache.streampark.common.conf.{InternalConfigHolder, Workspace}
-import org.apache.streampark.common.conf.CommonConfig.{MAVEN_AUTH_PASSWORD, 
MAVEN_AUTH_USER, MAVEN_REMOTE_URL}
+import org.apache.streampark.common.conf.CommonConfig.{MAVEN_AUTH_PASSWORD, 
MAVEN_AUTH_USER, MAVEN_REMOTE_URL, MAVEN_SETTINGS_PATH}
 import org.apache.streampark.common.util.{Logger, Utils}
 
 import com.google.common.collect.Lists
+import org.apache.commons.lang3.StringUtils
 import org.apache.maven.plugins.shade.{DefaultShader, ShadeRequest}
 import org.apache.maven.plugins.shade.filter.Filter
 import org.apache.maven.plugins.shade.resource.{ManifestResourceTransformer, 
ResourceTransformer, ServicesResourceTransformer}
 import org.apache.maven.repository.internal.MavenRepositorySystemUtils
+import org.apache.maven.settings.Settings
+import org.apache.maven.settings.building.{DefaultSettingsBuilderFactory, 
DefaultSettingsBuildingRequest}
 import org.codehaus.plexus.logging.{Logger => PlexusLog}
 import org.codehaus.plexus.logging.console.ConsoleLogger
 import org.eclipse.aether.{RepositorySystem, RepositorySystemSession}
-import org.eclipse.aether.artifact.{Artifact, DefaultArtifact}
+import org.eclipse.aether.artifact.DefaultArtifact
 import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory
-import org.eclipse.aether.repository.{LocalRepository, RemoteRepository}
+import org.eclipse.aether.repository.{LocalRepository, Proxy, RemoteRepository}
 import org.eclipse.aether.resolution.{ArtifactDescriptorRequest, 
ArtifactRequest}
 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
-import org.eclipse.aether.util.repository.AuthenticationBuilder
+import org.eclipse.aether.util.repository.{AuthenticationBuilder, 
DefaultMirrorSelector, DefaultProxySelector}
 
 import javax.annotation.{Nonnull, Nullable}
 
@@ -109,8 +112,8 @@ object MavenTool extends Logger {
     // resolve all jarLibs
     val jarSet = new util.HashSet[File]
     jarLibs.foreach {
-      x =>
-        new File(x) match {
+      jar =>
+        new File(jar) match {
           case jarFile if jarFile.exists() =>
             if (jarFile.isFile) {
               Try(Utils.checkJarFile(jarFile.toURI.toURL)) match {
@@ -203,7 +206,7 @@ object MavenTool extends Logger {
       return Set.empty[File]
     }
 
-    val (repoSystem, session) = getMavenEndpoint()
+    val (repoSystem, session) = getRepositoryEndpoint()
 
     val exclusions = mavenArtifacts
       .flatMap(_.extensions.map(_.split(":")))
@@ -260,7 +263,7 @@ object MavenTool extends Logger {
   }
 
   /** create composite maven endpoint */
-  private[this] def getMavenEndpoint(): (RepositorySystem, 
RepositorySystemSession) = {
+  private[this] def getRepositoryEndpoint(): (RepositorySystem, 
RepositorySystemSession) = {
 
     def newRepoSystem(): RepositorySystem = {
       locator.addService(
@@ -275,6 +278,40 @@ object MavenTool extends Logger {
     def newSession(system: RepositorySystem): RepositorySystemSession = {
       val session = MavenRepositorySystemUtils.newSession
       
session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, 
localRepo))
+
+      val setting = getSettings()
+      if (setting != null) {
+        // 1) mirror
+        val mirrors = setting.getMirrors
+        if (mirrors.nonEmpty) {
+          val defaultMirror = new DefaultMirrorSelector()
+          setting.getMirrors.foreach {
+            mirror =>
+              defaultMirror.add(
+                mirror.getId,
+                mirror.getUrl,
+                "default",
+                false,
+                mirror.getMirrorOf,
+                null)
+          }
+          session.setMirrorSelector(defaultMirror)
+        }
+
+        // 2) proxy
+        val proxies = setting.getProxies
+        if (proxies.nonEmpty && proxies.exists(_.isActive)) {
+          val proxySelector = new DefaultProxySelector()
+          proxies.foreach(
+            p => {
+              if (p.isActive) {
+                val proxy = new Proxy(p.getProtocol, p.getHost, p.getPort)
+                proxySelector.add(proxy, p.getNonProxyHosts)
+              }
+            })
+          session.setProxySelector(proxySelector)
+        }
+      }
       session
     }
 
@@ -283,6 +320,22 @@ object MavenTool extends Logger {
     (repoSystem, session)
   }
 
+  private def getSettings(): Settings = {
+    val settingPath = InternalConfigHolder.get[String](MAVEN_SETTINGS_PATH)
+    if (StringUtils.isNotBlank(settingPath)) {
+      val settingFile = new File(settingPath)
+      if (settingFile.exists() && settingFile.isFile) {
+        val settingsBuilderFactory = new DefaultSettingsBuilderFactory()
+        val settingsBuilder = settingsBuilderFactory.newInstance
+        val settingRequest = new DefaultSettingsBuildingRequest()
+        settingRequest.setGlobalSettingsFile(settingFile)
+        settingRequest.setUserSettingsFile(settingFile)
+        return settingsBuilder.build(settingRequest).getEffectiveSettings
+      }
+    }
+    null
+  }
+
   private class ShadedFilter extends Filter {
     override def canFilter(jar: File): Boolean = true
 

Reply via email to