我正在尝试使用以太获取 Maven 工件的依赖项。我看到一个 RepositorySystem.collectDependencies(),但它只获取编译和运行时范围的依赖项。如何获取工件的所有依赖项,包括测试和提供?
问问题
3192 次
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
这三个文件:
是一个使用 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 回答