使用命令行中的pom.xml获取可用的依赖项,例如m2eclipse插件中的eclipse依赖项搜索

时间:2011-05-21 14:26:38

标签: maven

Maven eclipse插件可以从默认存储库和配置的任何其他存储库中搜索可用的依赖项,因为我知道部分组ID或部分工件ID。这在查找可用的依赖项时非常有用。在命令行中使用maven是否有类似的机制。

示例:假设我只知道“mybatis”,我打算找到正确的组ID,工件ID,版本以及 type jar 是否可用。我可以使用eclipse搜索依赖项轻松完成此操作。但是没有eclipse,我真的需要使用浏览器并转到repo2.maven.org(现在我发现目录浏览已被禁用)。

1 个答案:

答案 0 :(得分:1)

首先,您可以搜索包含大量内容的sonatype存储库。 (虽然我不确定有多少其他回购镜像被反映出来。我猜这是一个单独的问题。)

其次,nexus本身有一个API,您可以使用它来编写针对存储库的查询脚本。例如,您可以使用Ruby or Groovy并执行类似的操作(假设已安装groovy;我在Linux上):

$ cat foo.groovy
#!/usr/bin/env groovy

def xml = args.length < 2 ? 
            "http://repository.sonatype.org/service/local/data_index?q=" + args[0] : 
            "http://repository.sonatype.org/service/local/data_index?g=${args[0]}&a=${args[1]}&v=${args[2]}"

println "Searching: " + xml

def root = new XmlParser().parseText( xml.toURL().text )
root.data.artifact.each {
  println "${it.groupId.text()}:${it.artifactId.text()}:${it.version.text()}"
}

然后,

$ ./foo.groovy  org.mybatis mybatis  3.0.4
Searching: http://repository.sonatype.org/service/local/data_index?g=org.mybatis&a=mybatis&v=3.0.4
org.mybatis:mybatis:3.0.4
org.mybatis:mybatis:3.0.4
org.mybatis:mybatis:3.0.4

或者,更接近你的问题(输出被截断),

$ ./foo.groovy  mybatis
Searching: http://repository.sonatype.org/service/local/data_index?q=mybatis
org.mybatis:mybatis:3.0.1
org.mybatis:mybatis:3.0.1
...
org.mybatis.caches:mybatis-caches-parent:1.0.0-RC1
org.mybatis.caches:mybatis-ehcache:1.0.0-RC1
org.mybatis.caches:mybatis-ehcache:1.0.0-RC1
...
org.apache.camel:camel-mybatis:2.7.0
org.apache.servicemix.bundles:org.apache.servicemix.bundles.mybatis:3.0.2_1

请注意,这假设您正在查询现有的 nexus maven repo,此外这只是搜索单个 repo。 (所以这不完全是你问的。)

但是,实际上,这就是我希望它的方式:我的maven项目使用的 only 存储库是一个单一的内部(intranet)nexus服务器,它起到镜像的作用(和我目前需要的所有第三方存储库的缓存。如果我决定从其他仓库(例如,googlecode或公司XYZ ......)引入其他罐子,那么我将该repo的url添加到我的内部nexus配置中。我的团队中的每个人 - netbeans / eclipse / mvn用户 - 总是指向单个内部maven repo,&amp;每个人都会自动获取新的工件。

然后您仍然可以使用上面的脚本来搜索工件。 (注意:它允许您进行通用搜索或GAV(组/工件/版本)搜索。)

如果您不确定给定工件所在的存储库,我想总会有http://mvnrepository.com/