从 Maven 存储库下载 jar 文件

Download jar files from Maven Repositories

有什么方法可以使用 java 或任何其他语言从 Maven 存储库下载 jar 文件?

在 Maven 项目中,当我添加依赖项时,如果本地系统上不存在,它通常会从远程存储库下载 jar 文件。

有什么方法可以做到这一点,而不使用 Maven,就像在库中一样,或者构建一个 URL 然后获取 jar?

例如,您可以从 public 存储库轻松下载任何 jar 或 pom 文件

https://repo1.maven.org/maven2/...
<!-- Example -->
https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-starter/2.6.7/

在 Java 中下载文件非常简单,当您拥有 URL.

时,有多种方法可以做到这一点

通常您会直接在存储库网页中找到与下载相关的信息,大多数时候这些信息也在 maven 网站上,不过 maven 的构建正是为了解决下载的 jar 文件的错误

  • 在浏览器中导航到 https://mvnrepository.com/
  • 确定您的图书馆。 (在搜索框中输入图书馆名称或相关主题。然后 select 单击它。)
  • 在图书馆的页面上,您必须单击所需的特定版本。
  • 在版本页面上有一个名为 Files 的 table 行,其中包含指向 .pom 和 .jar 文件的链接。

Java 应用程序从 URL 下载文件:

import java.io.*; import java.net.*; import java.nio.file.*;
public class Download {
    public static void main(String[] args) throws MalformedURLException, IOException{
        String url = args[0];
        String fileName = url.substring(url.lastIndexOf('/') + 1, url.length());
        try(InputStream in = new URL(args[0]).openStream()) {
                Files.copy(in, Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING);
        }  
    }
}
$ java Download.java https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/3.36.0.3/sqlite-jdbc-3.36.0.3.jar
$ ls sqlite-jdbc-3.36.0.3.jar 
sqlite-jdbc-3.36.0.3.jar
$ 

除了 Java 之外,其他一切都可以正常下载,即通过浏览器或命令行工具下载 curl:

$ curl https://repo1.maven.org/maven2/org/json/json/20220320/json-20220320.jar --output json-20220320.jar
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 70939  100 70939    0     0   339k      0 --:--:-- --:--:-- --:--:--  348k

使用以下命令找到 jar 文件的 URL: How To Download Jars From Maven Repository 然后使用此代码从 URL:

下载 jar 文件
try (BufferedInputStream in = new BufferedInputStream(new URL(FILE_URL).openStream());
  FileOutputStream fileOutputStream = new FileOutputStream(FILE_NAME)) {
    byte dataBuffer[] = new byte[1024];
    int bytesRead;
    while ((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) {
        fileOutputStream.write(dataBuffer, 0, bytesRead);
    }
} catch (IOException e) {
    // handle exception
}

Download a File From an URL in Java