Как сгенерировать / создать зависимости в pom.xml из папки lib, включая файлы jar - PullRequest
0 голосов
/ 25 января 2019

Допустим, у меня есть папка, содержащая все jar-файлы, необходимые для проекта maven.

Я хотел бы автоматически заполнить / записать зависимости в разделе pom.xml из jar-файлов в папке.Есть ли существующий автоматизированный способ сделать это?

Если в папке есть файл log4j-core-2.11.1.jar, я хотел бы получить:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.11.1</version>
</dependency>

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 января 2019

@ Йенс: Спасибо, ваш код определенно полезен (не могу проголосовать за вас; низкая репутация)

Поскольку я хотел быстрый (по крайней мере, для меня) способ, я закончил с несколькими строками Python: Вот они (если они могут помочь)

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)

Final res дает мне все зависимости, найденные на search.maven. Для отсутствующих банок вы можете использовать этот ответ

0 голосов
/ 25 января 2019

Предполагая, что файлы jar являются результатом сборки maven, вы можете начать с этого кода:

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

Это быстрый взлом, и вы должны добавить сканер каталогов, чтобы получить все имена файлов JAR, но это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...