0

我正在尝试通过此解决方案 [1] 中提到的以编程方式获取给定工件的所有 maven 依赖项。

我正在尝试获取ch.qos.logback:logback-classic:1.2.3.

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

        String groupId = "ch.qos.logback";
        String artifactId = "logback-classic";
        String version = "1.2.3";
        String dep = groupId + ":" + artifactId + ":" + version;
        Artifact artifact = new DefaultArtifact(dep);

        CollectRequest collectRequest = new CollectRequest(new Dependency(artifact, JavaScopes.COMPILE), Arrays.asList(central));
        DependencyFilter filter = DependencyFilterUtils.classpathFilter(JavaScopes.COMPILE);
        DependencyRequest request = new DependencyRequest(collectRequest, filter);
        DependencyResult result = system.resolveDependencies(session, request);

        for (ArtifactResult artifactResult : result.getArtifactResults()) {
            System.out.println(artifactResult.getArtifact().getFile());
        }
    }

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

这是我在运行 main 方法时得到的错误堆栈跟踪。

Exception in thread "main" org.eclipse.aether.resolution.DependencyResolutionException: Failed to read artifact descriptor for ch.qos.logback:logback-classic:jar:1.2.3
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:387)
    at sample.MavenResolver.main(MavenResolver.java:46)
Caused by: org.eclipse.aether.collection.DependencyCollectionException: Failed to read artifact descriptor for ch.qos.logback:logback-classic:jar:1.2.3
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:208)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:341)
    ... 1 more
Caused by: org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for ch.qos.logback:logback-classic:jar:1.2.3
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:282)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:198)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:202)
    ... 2 more
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not transfer artifact ch.qos.logback:logback-classic:pom:1.2.3 from/to central (http://repo1.maven.org/maven2/): HTTPS Required (501)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:444)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:246)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:223)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:267)
    ... 4 more
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact ch.qos.logback:logback-classic:pom:1.2.3 from/to central (http://repo1.maven.org/maven2/): HTTPS Required (501)
    at org.eclipse.aether.connector.basic.ArtifactTransportListener.transferFailed(ArtifactTransportListener.java:43)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:355)
    at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$DirectExecutor.execute(BasicRepositoryConnector.java:581)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get(BasicRepositoryConnector.java:249)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:520)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:421)
    ... 7 more
Caused by: org.apache.http.client.HttpResponseException: HTTPS Required (501)
    at org.eclipse.aether.transport.http.HttpTransporter.handleStatus(HttpTransporter.java:519)
    at org.eclipse.aether.transport.http.HttpTransporter.execute(HttpTransporter.java:322)
    at org.eclipse.aether.transport.http.HttpTransporter.implGet(HttpTransporter.java:274)
    at org.eclipse.aether.spi.connector.transport.AbstractTransporter.get(AbstractTransporter.java:59)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$GetTaskRunner.runTask(BasicRepositoryConnector.java:447)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:350)
    ... 12 more

[1] Maven:以编程方式获取所有依赖项

4

1 回答 1

0

错误在下一行。

RemoteRepository central = new RemoteRepository.Builder("central", "default", "http://repo1.maven.org/maven2/").build();

将repo maven URL http://repo1.maven.org/maven2/更改为https://repo1.maven.org/maven2/

于 2020-03-19T15:47:43.900 回答