如何获得Maven项目的直接(非传递)依赖项?

xytpbqjk  于 2022-11-02  发布在  Maven
关注(0)|答案(1)|浏览(198)

目前,当处理MavenProject时,我使用getDependencyArtifacts来获取直接(非传递)依赖项。但是,这个方法被标记为不推荐使用。那么,我应该使用什么来替代呢?我看到有一个方法getDependencies,但是它获取的是传递依赖项,而且我没有看到任何方法来过滤直接依赖项。
我应该使用RepositorySystem和它的方法collectDependencies,然后导航结果图,只得到根的子节点,我想这实际上是直接依赖关系吗?我没有更直接的、不过时的方法吗?

vmpqdwk3

vmpqdwk31#

这是基于一个快速搜索,有一个现有的API称为Aether。它的文档不是很好。
其中的方法称为:getDependencies(),并根据javadoc检索直接依赖关系。
https://maven.apache.org/resolver/maven-resolver-api/apidocs/org/eclipse/aether/resolution/ArtifactDescriptorResult.html
在github上有一个例子:

public class GetDirectDependencies
{

    public static void main( String[] args )
        throws Exception
    {
        System.out.println( "------------------------------------------------------------" );
        System.out.println( GetDirectDependencies.class.getSimpleName() );

        RepositorySystem system = Booter.newRepositorySystem();

        RepositorySystemSession session = Booter.newRepositorySystemSession( system );

        Artifact artifact = new DefaultArtifact( "org.eclipse.aether:aether-impl:1.0.0.v20140518" );

        ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest();
        descriptorRequest.setArtifact( artifact );
        descriptorRequest.setRepositories( Booter.newRepositories( system, session ) );

        ArtifactDescriptorResult descriptorResult = system.readArtifactDescriptor( session, descriptorRequest );

        for ( Dependency dependency : descriptorResult.getDependencies() )
        {
            System.out.println( dependency );
        }
    }

}

https://github.com/1984shekhar/fuse-examples-6.2/blob/master/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/GetDirectDependencies.java

相关问题