0
votes

Comment générer / créer des dépendances dans pom.xml à partir d'un dossier LIB, y compris les fichiers JAR

Disons que j'ai un dossier, y compris tous les fichiers JAR nécessaires dans un projet Maven.

Je voudrais remplir / écrire les dépendances dans la section POM.XML automatiquement à partir des fichiers JAR dans le dossier. Y a-t-il une manière automatisée existante de le faire?

S'il existe un fichier log4j-core-2.11.1.jar dans le dossier, je voudrais obtenir: xxx

merci


5 commentaires

Ces fichiers jar résultent-ils d'une construction maven? Maven stocke le pom.xml dans le pot dans Meta-Inf. Vous pouvez l'extraire de chaque bocal et obtenir toutes les informations dont vous avez besoin.


Il est clair pour vous que Maven ne résoudra pas ces pots contre votre dossier LIB? Vous avez toujours besoin d'un référentiel Maven.


@Jens: Les fichiers JAR et le projet proviennent du code hérité.


@JF: Les dépendances mettront à jour le repo Maven


@ TOKI-LOU-TOK Vous devez vérifier votre log4j-core-2.11.1.jar avec le code de ma réponse. Un fichier JAR avec ce nom est probablement le résultat de la construction Maven du projet Log4J.


3 Réponses :


0
votes

En supposant que les fichiers JAR sont le résultat d'une construction Maven que vous pouvez commencer par ce code:

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class CheckMe {

  public static void main(String args[]) throws IOException {

    String fileZip =
        "yourjar.jar";
    ZipInputStream zis = new ZipInputStream(new FileInputStream(fileZip));
    ZipEntry zipEntry = zis.getNextEntry();
    while (zipEntry != null) {
      if (zipEntry.getName().endsWith("pom.xml")) {
        final StringBuilder pom = new StringBuilder();
        final byte[] buffer = new byte[1024];

        while (zis.read(buffer, 0, buffer.length) != -1) {
          pom.append(new String(buffer));
        }

        System.out.println("<dependency>");
        Scanner scanner = new Scanner(pom.toString());
        boolean groupDone = false, artifactDone = false, versionDone = false;
        while (scanner.hasNextLine()) {
          String line = scanner.nextLine();
          if (line.contains("groupId") && !groupDone) {
            System.out.println(line);
            groupDone = true;
          }
          if (line.contains("artifactId") && !artifactDone) {
            System.out.println(line);
            artifactDone = true;
          }
          if (line.contains("version") && !versionDone) {
            System.out.println(line);
            versionDone = true;
          }
        }
        scanner.close();
        System.out.println("</dependency>");
      }
      zipEntry = zis.getNextEntry();
    }
    zis.closeEntry();
    zis.close();
  }
}


0 commentaires

1
votes

@Jens: Merci, votre code est définitivement utile (ne peut pas vous voter; faible représentant)

Comme je voulais un moyen rapide (au moins pour moi), j'ai fini avec quelques lignes Python: Ici, ils sont (au cas où ils pourraient aider) P>

import sys
import json
from urllib.request import urlopen
import hashlib
from string import Template
from collections import namedtuple
from os import listdir

path = 'your path to jar folder'
files = listdir(path)


def hashfile(filepath):
    f = open(filepath, 'rb')
    readFile = f.read()
    sha1Hash = hashlib.sha1(readFile)
    sha1Hashed = sha1Hash.hexdigest()
    return sha1Hashed

def request( hash ):
    url = 'https://search.maven.org/solrsearch/select?q=1:' + \
        hash+'&wt=json&rows=1'
    response = urlopen(url).read()
    return json.loads(response.decode('utf-8'));

dep = '''
<dependency>
    <groupId> $g </groupId>
    <artifactId> $a </artifactId>
    <version> $v </version>
</dependency>
'''

deps= '''
<dependencies>
    $d
</dependencies>
'''

deb_tpl = Template(dep)
debs_tpl = Template(deps)
Jar = namedtuple('Jar',[ 'g', 'a', 'v'])

dependencies = [None]*len(files)
for i, filename in enumerate(files):
    sha1=hashfile( "%s/%s" %(path, filename))
    print("File : %i : sha1 : %s" % (i, sha1))
    obj = request( str(sha1 ))
    if obj['response']['numFound'] == 1:
        jar = Jar(obj['response']['docs'][0]['g'],
                 obj['response']['docs'][0]['a'],
                 obj['response']['docs'][0]['v'])
        dependencies[i] = jar

#         print(obj['response']['docs'][0]['a'])
#         print(obj['response']['docs'][0]['g'])
#         print(obj['response']['docs'][0]['v'])

    else :
        print('Cannot find %s' % filename)
        dependencies[i] = None
deps_all = '\r\n'.join([ deb_tpl.substitute(f._asdict())for f in dependencies if f is not None ])
debs_tpl.substitute(d=deps_all)
print(res)


0 commentaires

0
votes

J'ai dirigé le script Python et il n'est pas complètement charné des dossiers imbriqués WRT, etc. J'ai trouvé un bon script alternatif à Comment connaître l'élevage et l'artefacte de tout pote externe dans le projet Maven Android


0 commentaires