Как разрешить зависимости maven внутри плагина maven? - PullRequest
2 голосов
/ 24 февраля 2012

Я пытаюсь использовать ArtifactResolver.resolve (ArtifactResolutionRequest) с флагом resolTransitively = true и это занимает 10 минут для отдельного модуля моего проекта.

ArtifactResolutionRequest request = new ArtifactResolutionRequest()
        .setArtifact( project.getArtifact() )
        .setArtifactDependencies( project.getDependencyArtifacts() )
        .setLocalRepository( localRepository )
        .setManagedVersionMap( project.getManagedVersionMap() )
        .setForceUpdate(false)
        .setResolveTransitively(true)
        .setOffline(true)
        .setListeners(listeners);
result = artifactResolver.resolve(request);

Если я просто соберу его с помощью mvn, это займет ~ 4сек.

Как maven разрешает все транзитивные зависимости перед компиляцией и как использовать его в коде?

// Отдельный модуль проекта интенсивно использует родителей, импортирует зависимости и, наконец, имеет 350 артефактов зависимостей. Так может ли быть то, что сборка maven сокращает некоторые этапы обработки или ArtifactResolver делает что-то дополнительно?

1 Ответ

1 голос
/ 24 февраля 2012

Это код, который я использую для разрешения артефакта и получения ссылки на файл:

// get maven artifact representing this mojo artifact
org.apache.maven.artifact.Artifact ma = ...; // create artifact reference
// resolve the maven artifact
try {
    resolver.resolve(ma, remoteRepositories, localRepository );
} catch (ArtifactNotFoundException ex) {
    throw new MojoExecutionException("could not find deploy artifact ["+a+"]", ex);
} catch (ArtifactResolutionException ex) {
    throw new MojoExecutionException("could not resolve deploy artifact ["+a+"]", ex);
}
File maFile = ma.getFile();

Ссылки на репозитории - это атрибуты уровня класса, которые разрешаются с помощью внедрения зависимостей в maven. Вам просто нужно объявить их в своем классе:

/** 
 * @parameter default-value="${localRepository}" 
 * @readonly
 * @required
 */
protected ArtifactRepository localRepository;

/** 
 * @parameter default-value="${project.remoteArtifactRepositories}" 
 * @readonly
 * @required
 */
protected java.util.List<ArtifactRepository> remoteRepositories;
...