without tutorial the que pom mvn create compiling artefact maven-2

maven 2 - tutorial - Encontrar la versión correcta del JAR correcto en un repositorio de Maven



tutorial de maven (7)

camino desde donde está disponible la jarra

jar_name=junit-4.12.jar sha1sum $jar_name > jar-sha1sums.txt shaVal=`cat jar-sha1sums.txt | cut -d " " -f1` response=$(curl -s ''http://search.maven.org/solrsearch/select?q=1:%22''$shaVal''%22&rows=20&wt=json'') formatted_response=`echo $response | grep -Po ''"response":*.*''` versionId=`echo $formatted_response | grep -Po ''"v":"[0-9]*.[0-9]*"'' | cut -d ":" -f2| xargs` artifactId=`echo $formatted_response | grep -Po ''"a":"[a-z]*"'' | cut -d ":" -f2 | xargs` groupId=`echo $formatted_response | grep -Po ''"g":"[a-z]*"'' | cut -d ":" -f2 | xargs`

Para encontrar la última versión disponible.

lat_ver_response=$(curl -s https://search.maven.org/solrsearch/select?q=g:"$groupId"+AND+a:"$artifactId"&core=gav&rows=20&wt=json) format_lat_ver_response=`echo $lat_ver_response | grep -Po ''"response":*.*''` latestVersionId=`echo $format_lat_ver_response | grep -Po ''"latestVersion":"[0-9]*.[0-9]*"'' | cut -d ":" -f2| xargs`

gist creado desde el script ant2maven @ https://github.com/sachinsshetty/ant2Maven.git

https://gist.github.com/sachinsshetty/bab6ca24671cafe2cb63daaab47103f3

Estoy convirtiendo una compilación que tiene 71 archivos .jar en su directorio lib/ global para usar Maven. Por supuesto, muchos desarrolladores los sacaron de la web en los últimos diez años de la historia de este proyecto y no siempre se agregaron a VCS con toda la información de la versión necesaria, etc.

¿Existe una forma fácil y automatizada de pasar de ese conjunto de archivos .jar a los elementos <dependency/> para usar en mis archivos pom.xml ? Espero una página web donde pueda enviar la suma de comprobación de un archivo jar y recuperar un fragmento XML. Los resultados de Google para ''búsqueda en el repositorio de Maven'' son básicamente solo búsquedas basadas en nombres. Y http://repo1.maven.org/ no tiene búsqueda alguna, por lo que puedo ver.

Actualización: GrepCode parece que puede encontrar proyectos con una suma de comprobación MD5. Pero no proporciona los detalles particulares ( groupId , artifactId ) que Maven necesita.

Aquí está el guión que se me ocurrió basado en la respuesta aceptada:

#!/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


Estaba en la misma situación que OP, pero como se mencionó en las respuestas posteriores, Jarvana ya no está lista.

Utilicé la búsqueda por la funcionalidad de suma de comprobación de Maven Central Search y su api de búsqueda para lograr los mismos resultados.

Primero crea un archivo con las sha1sums

sha1sum *.jar > jar-sha1sums.txt

luego use la siguiente secuencia de comandos de Python para verificar si hay información sobre los frascos en cuestión

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()

YMMV


Hola, puede usar mvnrepository para buscar artefactos o puede usar Eclipse y pasar por la dependencia de adición. Hay una búsqueda que utiliza el índice de Maven Central.



Si desea utilizar artifactId y la versión de la lectura del nombre del tarro, puede usar el siguiente código. Es una versión improvisada de Karl''s .

import os import sys from subprocess import check_output import requests def searchByShaChecksum(sha): searchurl = ''http://search.maven.org/solrsearch/select?q=1:%22'' + sha + ''%22&rows=20&wt=json'' resp = requests.get(searchurl) data = resp.json() return data def searchAsArtifact(artifact, version): searchurl = ''http://search.maven.org/solrsearch/select?q=a:"'' + artifact + ''" AND v:"'' + version.strip() + ''"&rows=20&wt=json'' resp = requests.get(searchurl) # print(searchurl) data = resp.json() return data def processAsArtifact(file: str): data = {''response'': {''start'': 0, ''docs'': [], ''numFound'': 0}} jar = file.replace(".jar", "") splits = jar.split("-") if (len(splits) < 2): return data for i in range(1, len(splits)): artifact = "-".join(splits[0:i]) version = "-".join(splits[i:]) data = searchAsArtifact(artifact, version) if data["response"] and data["response"]["numFound"] == 1: return data return data def writeToPom(pom: object, grp: str = None, art: str = None, ver: str = None): if grp is not None and ver is not None: pom.write(''<dependency>/n'') else: pom.write(''<!-- TODO Find information on this jar file--->/n'') pom.write(''<dependency>/n'') grp = grp if grp is not None else "" art = art if art is not None else "" ver = ver if ver is not None else "" pom.write(''/t<groupId>'' + grp + ''</groupId>/n'') pom.write(''/t<artifactId>'' + art + ''</artifactId>/n'') pom.write(''/t<version>'' + ver + ''</version>/n'') pom.write(''</dependency>/n'') def main(argv): if len(argv) == 0: print(bcolors.FAIL + ''Syntax : findPomJars.py <lib_dir_path>'' + bcolors.ENDC) lib_home = str(argv[0]) if os.path.exists(lib_home): os.chdir(lib_home) pom = open(''./auto_gen_pom_list.xml'', ''w'') successList = [] failedList = [] jarCount = 0 for lib in sorted(os.listdir(lib_home)): if lib.endswith(".jar"): jarCount += 1 sys.stdout.write("/rProcessed Jar Count: %d" % jarCount) sys.stdout.flush() checkSum = check_output(["sha1sum", lib]).decode() sha = checkSum.split(" ")[0] jar = checkSum.split(" ")[1].strip() data = searchByShaChecksum(sha) if data["response"] and data["response"]["numFound"] == 0: data = processAsArtifact(jar) if data["response"] and data["response"]["numFound"] == 1: successList.append("Found info for " + jar) jarinfo = data["response"]["docs"][0] writeToPom(pom, jarinfo["g"], jarinfo["a"], jarinfo["v"]) else: failedList.append("No info found for " + jar) writeToPom(pom, art=jar.replace(".jar/n", "")) pom.close() print("/n") print("Success : %d" % len(successList)) print("Failed : %d" % len(failedList)) for entry in successList: print(entry) for entry in failedList: print(entry) else: print bcolors.FAIL + lib_home, " directory doesn''t exists" + bcolors.ENDC if __name__ == "__main__": main(sys.argv[1:])

El código también se puede encontrar en GitHub


Tomó prestado el código y la idea de @Karl Tryggvason, pero no pudo hacer funcionar el script de Python. Siendo un mono de Windows, hice algo similar en Powershell (v3 requerido), no tan sofisticado (no genera un pom, solo arroja resultados) pero pensé que podría ahorrarle a alguien unos minutos.

$log = ''c:/temp/jarfind.log'' Get-Date | Tee-Object -FilePath $log $jars = gci d:/source/myProject/lib -Filter *.jar foreach ($jar in $jars) { $sha = Get-FileHash -Algorithm SHA1 -Path $jar.FullName | select -ExpandProperty hash $name = $jar.Name $json = Invoke-RestMethod "http://search.maven.org/solrsearch/select?q=1:%22$($sha)%22&rows=20&wt=json" "Found $($json.response.numfound) jars with sha1 matching that of $($name)..." | Tee-Object -FilePath $log -Append $jarinfo = $json.response.docs $jarinfo | Tee-Object -FilePath $log -Append }


Jarvana puede buscar en un resumen (seleccione resumen junto al campo de entrada Contenido ).

Por ejemplo, una búsqueda en d1dcb0fbee884bb855bb327b8190af36 devolverá commons-collections-3.1.jar.md5 . Luego, simplemente haga clic en el ícono http://www.jarvana.com/jarvana/p.gif para obtener los detalles (incluidas las coordenadas de Maven)

Uno se puede imaginar automatizando esto.