Поиск и список .m2 (локальный) Maven хранилище - PullRequest
1 голос
/ 07 ноября 2019

Для проекта я хочу выполнить поиск в локальном репозитории Maven (.m2) и перечислить артефакты. Как я могу сделать это на Java? Я нашел https://github.com/apache/maven-indexer и проверил, могу ли я использовать его для перечисления моего локального репозитория Maven. Но все еще не мог решить. Если у вас есть идея простой библиотеки, которую я могу использовать, пожалуйста, предложите?

Заранее спасибо. !

1 Ответ

0 голосов
/ 07 ноября 2019

Рассмотрите возможность использования Files.walkFileTree(Path start, FileVisitor<? super Path> visitor)

class MyM2Visitor extends SimpleFileVisitor<Path> {
    private final Path root;
    public MyM2Visitor(Path root) {
        this.root = root;
    }
    //implement rest as necessary
}

//later...

//Current user's .m2 directory:
Path m2 = Path.of(System.getProperty("user.home"), ".m2");

MyM2Visitor visitor = new MyM2Visitor(m2);
try {
    Files.walkFileTree(m2, visitor);
} catch(IOException e) {
    e.printStackTrace();
}

См. Также: SimpleFilevisitor JavaDoc

Вы должны настроить посетителя на выполнение соответствующих действий при обращении к каталогу илифайл, например:

@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
    logger.trace("File: {}", file);
    int count = file.getNameCount();
    Path versionPath = file.getParent();
    String versionAsString = versionPath.getFileName();
    //or:
    versionAsString = file.getName(count-2).toString();
    String artifactId = file.getName(count-3).toString();

    Path groupIdPath = file.getParent().getParent().getParent();
    Path relativeToM2 = root.relativize(groupIdPath);
    String groupId = relativeToM2.toString().replace(File.separatorChar, '.');

    //do other things

    return super.visitFile(file, attrs);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...