【问题标题】:How do I download a jar using maven programatically如何以编程方式使用 maven 下载 jar
【发布时间】:2012-06-09 10:10:34
【问题描述】:

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

我现在开始

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 工件的 url
  2. 给定模型,在本地存储库中找到代表 jar 的文件

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

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

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

感谢您的帮助

【问题讨论】:

  • Maven 下载他的 pom.xml 中指定的所有 jar 文件。
  • 还可以查看jcabi-aether,这可能有助于更轻松地执行此操作并减少代码行

标签: java maven aether


【解决方案1】:

要从 Maven 存储库下载工件,应使用 Aether lib

另见http://www.sonatype.com/people/category/aether/

此外还有examples怎么做和Aether lib的完整源代码。 很久以前,我had played a little 和 Aether 在一起。

【讨论】:

【解决方案2】:

选项 1

khmarbaise 推荐的以太。

它是 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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 2023-03-14
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多