我正在使用 Aether 来解决 java 项目中 maven 工件的依赖关系。我想找到直接依赖项(没有传递),并希望它们作为一个单独的解决工件。
如果使用收缩包装,我会做类似的事情
Resolver.resolve(mavenArtifact).withoutTransitivity().asSingleResolvedArtifact();
我有以下内容可以找到没有传递性的家属
RepositorySystem repoSystem = newRepositorySystem();
RepositorySystemSession session = newSession( repoSystem );
Artifact artifact = new DefaultArtifact(serviceJar.getCoordinate() );
ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest();
descriptorRequest.setArtifact( artifact );
descriptorRequest.setRepositories(new ArrayList<RemoteRepository>( Arrays.asList( newCentralRepository() ) ));
ArtifactDescriptorResult descriptorResult = repoSystem.readArtifactDescriptor( session, descriptorRequest );
descriptorResult.getDependencies();
}
private static RepositorySystem newRepositorySystem()
{
DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
locator.addService( RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class );
locator.addService( TransporterFactory.class, FileTransporterFactory.class );
locator.addService( TransporterFactory.class, HttpTransporterFactory.class );
return locator.getService( RepositorySystem.class );
}
private static RepositorySystemSession newSession( RepositorySystem system )
{
DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
LocalRepository localRepo = new LocalRepository( "/tmp" );
session.setLocalRepositoryManager( system.newLocalRepositoryManager( session, localRepo ));
return session;
}
public static List<RemoteRepository> newRepositories( RepositorySystem system, RepositorySystemSession session )
{
return new ArrayList<RemoteRepository>( Arrays.asList( newCentralRepository() ) );
}
private static RemoteRepository newCentralRepository()
{
return new RemoteRepository.Builder( "central", "default", "http://central-repo/" ).build();
}
所以这给了我所有依赖项的列表。我怎样才能得到这些依赖项的一个 jar?如何使用 Aether 实现这一点?是否有关于这两个库彼此不同的文档?换句话说,Aether 中的“MavenResolvedartifact”(如在 shrinkwrap 中)的等价物是什么?这样我就可以使用原始 java 将其转换为单个 jar?