【问题标题】:How to make sure Aether 'downloads' all dependencies in your local repo?如何确保 Aether “下载”本地仓库中的所有依赖项?
【发布时间】:2015-04-23 13:13:11
【问题描述】:

我正在尝试解决项目的直接依赖关系,基本上是其 POM 中的运行时和编译时依赖关系以及传递性。为此,我有以下代码

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 );
    }
}

}

这可以正常工作,但我如何获得“已解决”的依赖项列表。我需要能够在我的本地存储库中下载这个已解决的工件。基本上我需要一个 List 来返回,我可以从它访问本地磁盘上的 jar。

【问题讨论】:

  • 为什么不使用已经下载所有需要的工件的 Maven 本身?
  • 我正在尝试解决 pom 的所有直接和传递依赖项
  • 这不能回答我的问题。 Maven 已经这样做了。通过 Java 代码而不是使用 Maven 本身的目的是什么?
  • maven 是否将所有依赖项解析到一个 jar 中?
  • 您想创建一个 jar-with-dependencies 或 ueberjar/fatjar 吗?如果是这样,这可以通过 maven-assembly-plugin 或 maven-shade-plugin 来实现吗?

标签: maven dependencies artifacts aether


【解决方案1】:

如果您需要 jar 文件和该 jar 的物理路径,您应该“解决”它。我通过以下方式实现了它:

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

    ArtifactRequest artifactRequest = new ArtifactRequest();
    artifactRequest.setArtifact( artifact );
    artifactRequest.setRepositories( Booter.newRepositories( system, session ) );

    ArtifactResult artifactResult = system.resolveArtifact( session, artifactRequest );

    artifact = artifactResult.getArtifact();
To get the file:
    artifact.getFile();

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 2011-05-23
    • 2011-06-11
    相关资源
    最近更新 更多