Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[m2e-users] Dependencies resolution through https reverse proxy

Hi,

I'm faced to a infrastructure/network problem ... and I can't determine if it's a feature not supported, a bug, or other (configuration ?).

Environment :
- Eclipse Kepler SR2 & m2e 1.4.0 or Luna SR1 & m2e 1.6.0
- External Maven v3.2.3 configured as "Installation"
- A settings.xml configured as global/user "User Settings" (and used with previous Maven)
- settings.xml defines a master https company repository (repository & pluginRepository)
- settings.xml defines "server" credendials with password encryption (settings-security.xml usage)
- id of server/repository/pluginRepository is the same in settings.xml

Use case :
- My company provides a Maven repository for internal developments
- This repository can be accessed from internet (https) for external developments (at home ^^, no VPN configured, ...) via an infrastructure reverse proxy

Problem :
- The dependencies resolution works in Maven command line, but not through m2e plugin (only when dependency doesn't exist in local repository, classpath configuration works perfectly when dependency exists in local repository)
- Error is : Access denied to https://repository.my-company.com/repository/virtual/com/my-company/my-artifact/1.0.0-SNAPSHOT/maven-metadata.xml. Error code 401, Unauthorized

It is minor, but with m2e, I have lost the practice to use maven command line ^^.

The error seems to be the same as the direct url access via a browser.
This direct http call contains the (logically) response header 'WWW-Authenticate: "BASIC realm="Unspecified""', and authentication popup appears.
(I can't simply catch m2e http call, wireshark analysis on https is not trivial).

=> Hypothesis :
- m2e doesn't use server credentials defined in settings.xml
- m2e doesn't know re-send the http call with credentials when reverse proxy answers 401

I note that in the m2e plugin configuration, the maven embedded is used for dependencies resolution ... but if settings.xml used, it "should" work ...

Plugin seems to configure server credentials (org.eclipse.m2e.core.internal.repository.RepositoryRegistry), so some java properties about native proxy configuration in addition to settings.xml are not 'required' (i'm not facing to an outgoing proxy). So ... I'm a little lost :-)

This feature is supposed to be supported ? Or I'm wrong in somewhere ? Any idea are welcome.

Thank you in advance (and globally for your work, m2e is simply magic and wonderful).

Complete stack for information (with m2e 1.6.0) :
org.eclipse.aether.transfer.MetadataTransferException: [previous error]
    at org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.newException(DefaultUpdateCheckManager.java:363)
    at org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.checkMetadata(DefaultUpdateCheckManager.java:320)
    at org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolve(DefaultMetadataResolver.java:332)
    at org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolveMetadata(DefaultMetadataResolver.java:205)
    at org.apache.maven.repository.internal.DefaultVersionResolver.resolveVersion(DefaultVersionResolver.java:250)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:258)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:217)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.resolveCachedArtifactDescriptor(DefaultDependencyCollector.java:525)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.getArtifactDescriptorResult(DefaultDependencyCollector.java:509)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:409)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:363)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.process(DefaultDependencyCollector.java:351)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.doRecurse(DefaultDependencyCollector.java:494)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:458)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:363)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.process(DefaultDependencyCollector.java:351)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:254)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:316)
    at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:172)
    at org.apache.maven.project.DefaultProjectBuilder.resolveDependencies(DefaultProjectBuilder.java:213)
    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:186)
    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:118)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.readMavenProject(MavenImpl.java:634)
    at org.eclipse.m2e.core.internal.project.registry.DefaultMavenDependencyResolver.resolveProjectDependencies(DefaultMavenDependencyResolver.java:63)
    at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refreshPhase2(ProjectRegistryManager.java:529)
    at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager$3.call(ProjectRegistryManager.java:491)
    at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager$3.call(ProjectRegistryManager.java:1)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151)
    at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:495)
    at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:350)
    at org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager.refresh(ProjectRegistryManager.java:297)
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.configureNewMavenProjects(ProjectConfigurationManager.java:253)
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager$1.call(ProjectConfigurationManager.java:169)
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager$1.call(ProjectConfigurationManager.java:1)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1353)
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.importProjects(ProjectConfigurationManager.java:137)
    at org.eclipse.m2e.core.ui.internal.wizards.ImportMavenProjectsJob$1.doCreateMavenProjects(ImportMavenProjectsJob.java:73)
    at org.eclipse.m2e.core.ui.internal.wizards.AbstractCreateMavenProjectsOperation.run(AbstractCreateMavenProjectsOperation.java:62)
    at org.eclipse.m2e.core.ui.internal.wizards.ImportMavenProjectsJob.runInWorkspace(ImportMavenProjectsJob.java:82)
    at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

--
Alix Lourme

Back to the top