我正在尝试让 mvn 将 Delta Lake 下载到某个目录,以便我可以手动将其挂载到 Spark 中。这样 Spark 应用程序就不必出于安全目的向 mvn 发出 Web 请求,理想情况下可以防止它与 WWW 一起通信。
有人可以帮忙吗?我的假设是我不能直接从 mvn 下载 Jar,因为我会丢失链中的所有依赖项。
我正在使用
mvn org.apache.maven.plugins:maven-dependency-plugin:3.2.0:get \ -DremoteRepositories=https://repo.maven.apache.org/maven2/ \ -Dartifact=io.delta:delta-spark_2.13:3.1.0 \ -Ddest=~/_mvn_local
这会报告“构建成功”。计划是通过环境变量将该目录中的所有 jar 挂载到 Spark。但没有输出到目标目录。我想避免不必要地定义 POM。确切的输出是:
data-lake % mvn org.apache.maven.plugins:maven-dependency-plugin:3.2.0:get \
-DremoteRepositories=https://repo.maven.apache.org/maven2/ \
-Dartifact=io.delta:delta-spark_2.13:3.1.0 \
-Ddest=~/_build
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- dependency:3.2.0:get (default-cli) @ standalone-pom ---
[INFO] Resolving io.delta:delta-spark_2.13:jar:3.1.0 with transitive dependencies
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.548 s
[INFO] Finished at: 2024-03-01T14:37:59Z
[INFO] ------------------------------------------------------------------------```
这是一个可以实现我想要的功能的脚本:
#!/bin/bash
download_dependency() {
rm -rf infra-data-lake/spark/_build
mvn_command="mvn -f <your pom> dependency:copy-dependencies -DoutputDirectory=../spark/_build/spark_jars -Dscope=provided"
# Execute Maven command
if ! $mvn_command; then
echo "❌ Error occurred while downloading Spark dependencies."
exit 1
else
echo "✅ Spark dependencies download completed successfully."
fi
}
download_dependency
如果你想下载所有依赖项,你必须定义一个 POM 文件,通过
-f
标志将 Maven 指向 pom,并让它下载所有带有依赖项的传递依赖项:复制依赖项声明和输出。 Dscope=provided
似乎也是获得一切的必要条件。