Загрузите зависимости maven программно

Я пытался программно загрузить все зависимости maven через эфир. Я могу получить все транзитивные зависимости (любезно предоставленный кодом из

https://github.com/apache/maven-resolver/blob/master/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/ResolveTransitiveDependencies.java

однако, потому что он не загружает какие-либо плагины, необходимые для зависимости.

Поскольку я новичок в Maven, я могу упустить что-то совершенно очевидное здесь, но любая помощь будет принята с благодарностью.

Если я попытаюсь загрузить зависимости для плагина sonarqube с помощью ResolveTransitiveDependencies.java, я правильно загрузил следующее.

org\sonarsource\scanner\maven\sonar-maven-plugin\3.6.0.1398\sonar-maven-plugin-3.6.0.1398.jar
org\sonatype\plexus\plexus-sec-dispatcher\1.4\plexus-sec-dispatcher-1.4.jar
org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar
org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar
org\sonarsource\scanner\api\sonar-scanner-api\2.12.0.1661\sonar-scanner-api-2.12.0.1661.jar
commons-lang\commons-lang\2.6\commons-lang-2.6.jar

Однако он не загружает какие-либо плагины, которые являются частью отдельных переходных зависимостей POM. Есть ли способ сделать это из эфира?


person Joseph    schedule 01.05.2019    source источник
comment
Почему вы хотите загружать их программно, вместо того, чтобы позволить Maven делать свою работу? Какова цель этого? Какую проблему вы пытаетесь решить?   -  person khmarbaise    schedule 01.05.2019
comment
Есть ли что-то плохое в том, чтобы просто выполнить компиляцию mvn?   -  person Nathan Adams    schedule 01.05.2019
comment
@khmarbaise - Поскольку команда работает над сетью с воздушным зазором, есть ощущение, что предпочтительнее загружать зависимости по мере необходимости вне среды maven. Поскольку для dependency:go-offline требуется проект Maven, идея состоит в том, чтобы иметь файл JSON с необходимой зависимостью, а затем загрузить его с помощью программы вне maven - если это имеет смысл ??   -  person Joseph    schedule 02.05.2019
comment
Самое простое решение - использовать менеджер репозитория, создать приложение и реплицировать это состояние во внутреннюю сеть.. проще, меньше работы... Создание дополнительных файлов с зависимостями - не очень хорошая идея, потому что он дублирует информацию, которая уже есть в файле pom.. .   -  person khmarbaise    schedule 02.05.2019
comment
@khmarbaise - не уверен, что полностью понимаю. Проблема в том, что приложение недоступно во внешней сети для сборки. POM можно скопировать, поэтому идея состоит в том, чтобы использовать pom для загрузки всех прямых зависимостей и зависимостей плагинов, а затем скопировать их в диспетчер внутреннего сетевого репозитория, который затем можно использовать для сборки приложения.   -  person Joseph    schedule 02.05.2019


Ответы (1)


Для этого можно попробовать библиотеку Jeka (https://jeka.dev).

import dev.jeka.core.api.depmanagement.*;

import java.nio.file.Path;
import java.util.List;

import static dev.jeka.core.api.depmanagement.JkJavaDepScopes.*;

public class SampleDepDownload {

    public static void main(String[] args) {
        JkDependencySet deps = JkDependencySet.of()
                .and("com.googlecode.playn:playn-core:1.4")
                .and("com.threerings:tripleplay:1.4")
                .withDefaultScopes(COMPILE_AND_RUNTIME);
        JkDependencyResolver resolver = JkDependencyResolver.of(JkRepo.ofMavenCentral());
        List<Path> libs = resolver.resolve(deps, RUNTIME).getFiles().getEntries();
    }
}
person Jerome Angibaud    schedule 09.07.2019