使用 Maven Connector 作为 Maven Registry 镜像

使用 Maven Connector 作为 Maven Registry 镜像,可以在执行 mvn 操作时将 Maven maven registry 作为镜像使用。

前提条件

  • 已安装 Connectors 系统(Operator、ConnectorsCore 和 ConnectorsMaven 组件)的 Kubernetes 集群。有关安装这些组件的详细信息,请参阅安装指南
  • maven registry 地址和凭据,maven registry 应支持作为镜像使用,例如 maven central、由 nexus 托管的代理类型 maven 仓库等。
  • 具备 Kubernetes 和 Maven 的基础知识

流程概述

您需要创建一个 maven connector,将 connector 地址设置为 maven registry 地址,并将 useAsMirror 参数设置为 true
然后创建一个通过该 connector 执行 mvn package 的 job。

注意:

  • maven registry 应支持作为镜像使用,例如 maven central、由 nexus 托管的代理类型 maven 仓库等。
步骤操作说明
1创建 Namespace为演示设置专用的 namespace
2配置 Maven Connector创建 maven connector 资源
3创建执行 mvn package 的 Maven Job创建通过 connector 执行 mvn package 的 job
4验证结果验证 mvn package 操作成功执行

操作步骤

第 1 步:创建 Namespace

为本次演示创建专用的 namespace:

kubectl create ns connectors-maven-demo

第 2 步:创建 Maven Connector

创建 maven connector 资源,将 spec.address 设置为 maven registry 地址,并将 useAsMirror 参数设置为 true
有关创建和配置 connector 的详细信息,请参阅Connectors 快速入门指南

cat <<EOF | kubectl apply -n connectors-maven-demo -f -
apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: maven-mirror-connector
spec:
  connectorClassName: maven
  address: https://nexus.example.com/repository/maven-public # 替换为您的 Maven 代理仓库地址,我们将从此仓库下载 jar。
  params:
  - name: useAsMirror
    value: "true" # 设置为 "true" 以将 maven registry 用作镜像
  auth:
    name: basicAuth
EOF

确认 connector 状态为 "Ready":

kubectl get connector maven-mirror-connector -n connectors-maven-demo

输出应显示:

NAME              CLASS   ADDRESS                                                    READY   REASON   AGE
maven-connector   maven   https://nexus.example.com/repository/maven-snapshots   True             10s

第 3 步:创建执行 mvn package 的 Job

创建一个使用该 connector 执行 mvn package 的 job:

cat <<'EOF' | kubectl apply -n connectors-maven-demo -f -
apiVersion: batch/v1
kind: Job
metadata:
  name: mvn-package
spec:
  backoffLimit: 0
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: mvn
        image: docker.io/library/maven:3.9.11-eclipse-temurin-24-alpine # 替换为包含 maven 的镜像
        imagePullPolicy: IfNotPresent
        env:
        - name: MAVEN_OPTS
          value: -Dmaven.resolver.transport=wagon
        command:
        - "sh"
        - "-c"
        - |
          set -ex

          mkdir -p ~/.m2
          cp /opt/maven/settings.xml ~/.m2/settings.xml

          keytool -importcert -noprompt \
            -trustcacerts \
            -keystore $JAVA_HOME/lib/security/cacerts \
            -storepass changeit \
            -alias corp-ca \
            -file /opt/maven/ca.cert

          echo "Generating project using maven archetype"
          cd /tmp
          mvn archetype:generate -DgroupId=com.example -DartifactId=HelloWorldApp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

          cd HelloWorldApp/
          echo "Package project"
          mvn package

        volumeMounts:
        - name: settings
          mountPath: /opt/maven
      volumes:
      - name: settings
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "maven-mirror-connector"
            configuration.names: "settings"
EOF

第 4 步:验证操作

查看 job 日志,确认 mvn package 操作成功执行,并且在执行 mvn package 时从 maven registry 镜像下载了 jar。

kubectl logs -f job/mvn-package -n connectors-maven-demo

等待几分钟,您应该会看到 mvn package 操作成功完成,并且从 connector 地址指定的 maven registry 下载了 jar。

示例输出:

Downloaded from connectors-mirror: https://nexus.example.com/repository/maven-public/org/apache/commons/commons-compress/1.26.1/commons-compress-1.26.1.jar (1.1 MB at 386 kB/s)
Downloaded from connectors-mirror: https://nexus.example.com/repository/maven-public/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar (365 kB at 126 kB/s)
Downloaded from connectors-mirror: https://nexus.example.com/repository/maven-public/com/github/luben/zstd-jni/1.5.5-11/zstd-jni-1.5.5-11.jar (6.8 MB at 1.7 MB/s)
[INFO] Building jar: /tmp/HelloWorldApp/target/HelloWorldApp-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  42.678 s
[INFO] Finished at: 2025-09-02T23:14:46Z
[INFO] ------------------------------------------------------------------------