如何以编程方式使用maven下载jar

时间:2012-06-05 11:30:31

标签: java maven aether

我正在编写一个应用程序,要求我下载给定mavens 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 Model对象来表示它。这似乎运作良好。

我想知道的是两件事:

  1. 找到模型在maven插件将使用的maven存储库中表示的jar工件的url
  2. 给出模型,找到代表本地存储库中jar的文件
  3. 我已经有质量差的解决方案:我去mvnrepository.com手动编码url,我使用〜/ .m2 / repository作为文件的前缀。我显然可以改进这个解决方案,但我最终会很难复制经过充分测试并在maven代码库中使用的代码。

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

    我已经做了一些谷歌搜索,但搜索有关maven和jars(甚至是stackoverflow)的任何有趣的事情是,我找到了很多关于如何使用maven的解决方案,而不是如何使用maven课程。

    感谢您的帮助

2 个答案:

答案 0 :(得分:6)

选项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

答案 1 :(得分:2)

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

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

此外还有examples如何做事以及Aether lib的完整源代码。 一段时间之后,我had played a little与Aether相遇。