在maven存储库中查找正确版本的正确JAR

Mat*_*nry 17 maven-2

我正在将.jar其全局lib/目录中包含71个文件的构建转换为使用Maven.当然,在这个项目的历史过去十年中,许多开发人员已经从Web上撤下了这些内容,并且并不总是将所有必需的版本信息等添加到VCS中.

是否有一种简单,自动的方式从该组.jar文件转到<dependency/>我的pom.xml文件中使用的相应元素?我希望有一个网页,我可以提交jar文件的校验和,并获取XML片段.谷歌搜索'maven存储库搜索'基本上只是找到基于名称的搜索.而http://repo1.maven.org/已经没有任何搜索,据我所看到的.

更新:GrepCode看起来可以找到给定MD5校验和的项目.但它没有提供Maven需要的特定细节(groupId,artifactId).

这是我根据接受的答案提出的脚本:

#!/bin/bash

for f in *.jar; do
    s=`md5sum $f | cut -d ' ' -f 1`;
    p=`wget -q -O - "http://www.jarvana.com/jarvana/search?search_type=content&content=${s}&filterContent=digest" | grep inspect-pom | cut -d \" -f 4`;
    pj="http://www.jarvana.com${p}";
    rm -f tmp;
    wget -q -O tmp "$pj";

    g=`grep groupId tmp | head -n 1 | cut -d \> -f 3 | cut -d \< -f 1`;
    a=`grep artifactId tmp | head -n 1 | cut -d \> -f 3 | cut -d \< -f 1`;
    v=`grep version tmp | head -n 1 | cut -d \> -f 3 | cut -d \< -f 1`;
    rm -f tmp;

    echo '<dependency> <!--' $f $s $pj '-->';
    echo "  <groupId>$g</groupId>";
    echo "  <artifactId>$a</artifactId>";
    echo "  <version>$v</version>";
    echo "</dependency>";
    echo;
done
Run Code Online (Sandbox Code Playgroud)

Kar*_*son 5

我的情况与OP相同,但正如后面的答案中提到的,Jarvana不再起来了。

我使用Maven Central Search的校验和搜索功能及其搜索 api来获得相同的结果。

首先使用 sha1sums 创建一个文件

sha1sum *.jar > jar-sha1sums.txt
Run Code Online (Sandbox Code Playgroud)

然后使用以下 python 脚本检查是否有有关相关 jar 的任何信息

import json
import urllib2

f = open('./jar-sha1sums.txt','r')
pom = open('./pom.xml','w')
for line in f.readlines():
    sha = line.split("  ")[0]
    jar = line.split("  ")[1]
    print("Looking up "+jar)
    searchurl = 'http://search.maven.org/solrsearch/select?q=1:%22'+sha+'%22&rows=20&wt=json'
    page = urllib2.urlopen(searchurl)
    data = json.loads("".join(page.readlines()))
    if data["response"] and data["response"]["numFound"] == 1:
        print("Found info for "+jar)
        jarinfo = data["response"]["docs"][0]
        pom.write('<dependency>\n')
        pom.write('\t<groupId>'+jarinfo["g"]+'</groupId>\n')
        pom.write('\t<artifactId>'+jarinfo["a"]+'</artifactId>\n')
        pom.write('\t<version>'+jarinfo["v"]+'</version>\n')
        pom.write('</dependency>\n')
    else:
        print "No info found for "+jar
        pom.write('<!-- TODO Find information on this jar file--->\n')
        pom.write('<dependency>\n')
        pom.write('\t<groupId></groupId>\n')
        pom.write('\t<artifactId>'+jar.replace(".jar\n","")+'</artifactId>\n')
        pom.write('\t<version></version>\n')
        pom.write('</dependency>\n')
pom.close()
f.close()
Run Code Online (Sandbox Code Playgroud)

青年MMV


Pas*_*ent 3

Jarvana可以搜索摘要(选择内容输入字段旁边的摘要)。

例如,搜索d1dcb0fbee884bb855bb327b8190af36将返回commons-collections-3.1.jar.md5. 然后只需单击替代文本 图标以获取详细信息(包括 Maven 坐标)。

人们可以想象将其自动化。

  • 但 jarvana 已关闭(我认为是永久关闭?) - http://jarvana.blogspot.com/ 有替代方案吗? (2认同)