在Maven Central上找到工件的所有直接依赖项

在Maven Central上找到工件的所有直接依赖项,第1张

在Maven Central上找到工件的所有直接依赖

在Maven插件之外,您可以使用Aether以编程方式执行此 *** 作。有一种方法

readArtifactDescriptor
可以做到这一点:

获取有关工件的信息,例如其直接依赖关系和潜在的重定位。

首先,将以太依赖项添加到您的POM中:

<dependencies>    <dependency>        <groupId>org.eclipse.aether</groupId>        <artifactId>aether-impl</artifactId>        <version>${aetherVersion}</version>    </dependency>    <dependency>        <groupId>org.eclipse.aether</groupId>        <artifactId>aether-connector-basic</artifactId>        <version>${aetherVersion}</version>    </dependency>    <dependency>        <groupId>org.eclipse.aether</groupId>        <artifactId>aether-transport-file</artifactId>        <version>${aetherVersion}</version>    </dependency>    <dependency>        <groupId>org.eclipse.aether</groupId>        <artifactId>aether-transport-http</artifactId>        <version>${aetherVersion}</version>    </dependency>    <dependency>        <groupId>org.apache.maven</groupId>        <artifactId>maven-aether-provider</artifactId>        <version>${mavenVersion}</version>    </dependency></dependencies><properties>    <aetherVersion>1.1.0</aetherVersion>    <mavenVersion>3.3.9</mavenVersion></properties>

然后您可以拥有:

public static void main(final String[] args) throws Exception {    DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();    RepositorySystem system = newRepositorySystem(locator);    RepositorySystemSession session = newSession(system);    RemoteRepository central = new RemoteRepository.Builder("central", "default", "http://repo1.maven.org/maven2/").build();    Artifact artifact = new DefaultArtifact("groupId:artifactId:version");    ArtifactDescriptorRequest request = new ArtifactDescriptorRequest(artifact, Arrays.asList(central), null);    ArtifactDescriptorResult result = system.readArtifactDescriptor(session, request);    for (Dependency dependency : result.getDependencies()) {        System.out.println(dependency);    }}private static RepositorySystem newRepositorySystem(DefaultServiceLocator locator) {    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("target/local-repo");    session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));    // set possible proxies and mirrors    session.setProxySelector(new DefaultProxySelector().add(new Proxy(Proxy.TYPE_HTTP, "host", 3625), Arrays.asList("localhost", "127.0.0.1")));    session.setMirrorSelector(new DefaultMirrorSelector().add("my-mirror", "http://mirror", "default", false, "external:*", null));    return session;}

这是创建一个以太存储库系统,并告诉它读取给定工件的工件描述符。工件由构造函数构造,

newDefaultArtifact("...")
并为其提供所需的坐标。

使用该工件和要从中获取请求的存储库列表创建一个请求对象。在上面的示例中,仅添加了Maven
Central,但是您可以

RemoteRepository
通过使用
RemoteRepository.Builder
类创建它们来添加更多内容。调用后
readArtifactDescriptor
,结果包含直接依赖项列表,可以使用检索
getDependencies()

代理和镜像可以分别在

DefaultProxySelector
和的帮助下进行配置
DefaultMirrorSelector
DefaultProxySelector.add
接受一个
Proxy
as参数,可以使用其构造函数通过将其类型(例如
"http"
),主机,端口和可选的
Authentication
(通过查看
AuthenticationBuilder
类以创建身份验证对象)和非代理主机的列表传递给它。以相同的方式,
DefaultMirrorSelector.add
获取其ID,URL,类型(
"default"
适用于Maven,但您可以使用P2),是否为存储库管理器,已镜像的实际存储库ID(根据镜像规范)以及存储库类型未镜像。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5430119.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存