java - 如何以编程方式使用 Maven 下载 jar

标签 java maven aether

我正在编写一个应用程序,它要求我下载一个给定 maven groupid/artifactid/version 的 jar。

我现在开始

public Model pomToModel(String pomUrl) throws Exception {
URL url = new URL(pomUrl);
    InputStream stream = url.openStream();
    try {
        Model model = new MavenXpp3Reader().read(stream);
        return model;
    } finally {
        stream.close();
    }
}

所以给定 POM 的 url,我现在有代表它的 maven 模型对象。这似乎运作良好。

我想知道的是两件事:

  1. 在 maven 插件将使用的 maven 存储库中找到模型表示的 jar Artifact 的 url
  2. 给定模型,在本地存储库中找到代表 jar 的文件

我已经有了质量很差的解决方案:我去 mvnrepository.com 手动编码 url,我使用 ~/.m2/repository 作为文件的前缀。我显然可以改进这个解决方案,但我最终会复制在 Maven 代码库中经过良好测试和良好使用的代码。

我真的很想知道如何使用 Maven 类来做到这一点。

我已经进行了相当多的谷歌搜索,但是关于搜索任何关于 maven 和 jars(甚至在 stackoverflow 上)的有趣的事情是我找到了很多关于如何使用 maven 的解决方案,而不是如何使用Maven 类。

感谢帮助

最佳答案

选项 1

khmarbaise 推荐的 Aether。

它是 Maven 3.0 附带的原生库

选项 2

如果您想要一个从命令行或在 shell 脚本中下载 Maven 模块的简单解决方案,Apache ivy 有一个 standalone jar 。

例子:

using IVY dependencies manager programmatically

选项 3

如果您只是在寻找 Maven jar 而不关心依赖项管理,那么它甚至更简单。

以下是直接从 Maven Central 检索 log4j jar 的方法:

curl -O http://search.maven.org/remotecontent?filepath=log4j/log4j/1.2.17/log4j-1.2.17.jar

如果您使用的是 Nexus 存储库管理器,它有一个有用的 REST API

Using the Nexus rest API to get latest artifact version for given groupid/artifactId

关于java - 如何以编程方式使用 Maven 下载 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10896515/

相关文章:

java - 在 Java 饼图上获取值而不是名称

Java 泛型接口(interface)转换

java - 有没有办法正确集成两个(或更多)Spring-Boot 项目?

java - 如何使用 API 3.1.1 在 Maven 插件中使用 Aether (eclipse)?

maven - 在运行时动态加载 Maven Artifact

java - 如何动态扩展diff父类?

java - Spark 采样 - 比使用完整的 RDD/DataFrame 快多少

maven 插件插件:descriptor goal fails at the and of file

java - JSONObject ClassNotFoundException异常

java - Maven Java API : Standalone Dependency Resolution (i. e。不是 Maven 插件)