4

我正在尝试使用以太获取 Maven 工件的依赖项。我看到一个 RepositorySystem.collectDependencies(),但它只获取编译和运行时范围的依赖项。如何获取工件的所有依赖项,包括测试和提供?

4

5 回答 5

3

看一下jcabi-aether(我是一名开发人员),它是 Sonatype Aether 的包装器:

File repo = this.session.getLocalRepository().getBasedir();
Collection<Artifact> deps = new Aether(this.getProject(), repo).resolve(
  new DefaultArtifact("junit", "junit-dep", "", "jar", "4.10"),
  JavaScopes.RUNTIME
);
于 2013-03-25T07:13:29.307 回答
2

假设您正在使用DefaultRepositorySystemSession,您可以执行以下操作:

defaultRepositorySystemSession.setDependencySelector(new DependencySelector() {
    @Override
    public boolean selectDependency(Dependency dependency) {
        return true;
    }

    @Override
    public DependencySelector deriveChildSelector(DependencyCollectionContext context) {
        return this;
    }
});

接着

CollectResult result = repositorySystem.collectDependencies(defaultRepositorySystemSession, request);

这是一个执行此操作的示例项目。

于 2015-03-08T15:54:35.680 回答
1

您可以DependencyFilter在 Eclipses Aether 中使用。下面的示例的完整版本可以在这组很棒的Aether 片段中找到。

DependencyFilter classpathFilter = DependencyFilterUtils.classpathFilter(JavaScopes.COMPILE, JavaScopes.PROVIDED);

CollectRequest collectRequest = new CollectRequest();
collectRequest.setRoot( new Dependency( artifact, JavaScopes.COMPILE ) );
collectRequest.setRepositories(repositories);

DependencyRequest dependencyRequest = new DependencyRequest( collectRequest, classpathFilter );

List<ArtifactResult> artifactResults =
    system.resolveDependencies( session, dependencyRequest ).getArtifactResults();

更新

0.9.0M3 版本与 Maven 3.1.0 不兼容,所以不要在 Maven 内部,即在插件中使用它。

于 2013-09-30T10:54:55.207 回答
1

这三个文件:

https://github.com/terraframe/Runway-SDK/tree/v1.8.0/runwaysdk-server/src/main/java/com/runwaysdk/business/generation/maven

是一个使用 Aether 的独立工作示例。

它工作了几个月,然后我突然弹出一个问题,有时在 Mac JRE 上会在 com.sun:tools.jar 上抛出 DependencyResolutionException。

祝你好运,如果你决定使用它,我将改为使用 maven-dependency-plugin dependency:build-classpath

于 2013-08-19T17:07:26.750 回答
1

看看这个 github 项目:https
://github.com/Gemba/mvn-dd 它下载所有依赖项,包括测试和提供。
它使用以太的库来获取它们。

于 2016-08-31T16:47:53.213 回答