【问题标题】:Deploying Maven dependencies to S3: No connector available将 Maven 依赖项部署到 S3:没有可用的连接器
【发布时间】:2014-09-13 19:31:10
【问题描述】:

我正在尝试使用 Amazon S3 来托管我的 Maven 工件。我在 pom.xml 中添加了以下内容:

<distributionManagement>
    <repository>
        <id>maven.xxx.com-release</id>
        <name>AWS S3 Release Repository</name>
        <url>s3://maven.xxx.com/release</url>
    </repository>
    <snapshotRepository>
        <id>maven.xxx.com-snapshot</id>
        <name>AWS S3 Snapshot Repository</name>
        <url>s3://maven.xxx.com/snapshot</url>
    </snapshotRepository>
</distributionManagement>

<build>
    <extensions>
        <extension>
            <groupId>org.springframework.build</groupId>
            <artifactId>aws-maven</artifactId>
            <version>5.0.0.RELEASE</version>
        </extension>
    </extensions>
</build>

这工作正常,我的快照存储在 S3 上。现在我正在尝试在另一个项目中引用该工件:

<repositories>
    <repository>
        <id>maven.xxx.com-release</id>
        <name>AWS S3 Release Repository</name>
        <url>s3://maven.xxx.com/release</url>
    </repository>
    <repository>
        <id>maven.xxx.com-snapshot</id>
        <name>AWS S3 Snapshot Repository</name>
        <url>s3://maven.xxx.com/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

<build>
    <extensions>
        <extension>
            <groupId>org.springframework.build</groupId>
            <artifactId>aws-maven</artifactId>
            <version>5.0.0.RELEASE</version>
        </extension>
    </extensions>
</build>

当我运行$ mvn deploy -X 时,我收到以下错误:

Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T15:51:42+02:00)
Maven home: /usr/local/Cellar/maven/3.2.2/libexec
Java version: 1.8.0_11, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.9.4", arch: "x86_64", family: "mac"
[INFO] Error stacktraces are turned on.
[DEBUG] Reading global settings from /usr/local/Cellar/maven/3.2.2/libexec/conf/settings.xml
[DEBUG] Reading user settings from /Users/philipp/.m2/settings.xml
[DEBUG] Using local repository at /Users/philipp/.m2/repository
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/philipp/.m2/repository
[INFO] Scanning for projects...
[DEBUG] Skipped remote update check for com.xxx:parent-pom:1.4.11-SNAPSHOT/maven-metadata.xml, locally installed metadata up-to-date.
[DEBUG] Skipped remote update check for com.xxx:parent-pom:1.4.11-SNAPSHOT/maven-metadata.xml, locally installed metadata up-to-date.
[DEBUG] Skipped remote update check for com.xxx:parent-pom:1.4.11-SNAPSHOT/maven-metadata.xml, locally installed metadata up-to-date.
[DEBUG] java.util.NoSuchElementException
      role: org.apache.maven.wagon.Wagon
  roleHint: s3
org.codehaus.plexus.component.repository.exception.ComponentLookupException: java.util.NoSuchElementException
      role: org.apache.maven.wagon.Wagon
  roleHint: s3
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:264)
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:252)
    at org.eclipse.aether.internal.connector.wagon.PlexusWagonProvider.lookup(PlexusWagonProvider.java:33)
    at org.eclipse.aether.connector.wagon.WagonRepositoryConnector.lookupWagon(WagonRepositoryConnector.java:337)
    at org.eclipse.aether.connector.wagon.WagonRepositoryConnector.<init>(WagonRepositoryConnector.java:157)
    at org.eclipse.aether.connector.wagon.WagonRepositoryConnectorFactory.newInstance(WagonRepositoryConnectorFactory.java:159)
    at org.eclipse.aether.internal.impl.DefaultRepositoryConnectorProvider.newRepositoryConnector(DefaultRepositoryConnectorProvider.java:139)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:531)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:436)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:262)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:239)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact(DefaultRepositorySystem.java:295)
    at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:171)
    at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:224)
    at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:903)
    at org.apache.maven.model.building.DefaultModelBuilder.readParent(DefaultModelBuilder.java:755)
    at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:309)
    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:452)
    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:421)
    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:385)
    at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:663)
    at org.apache.maven.DefaultMaven.getProjectsForMavenReactor(DefaultMaven.java:654)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:243)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.util.NoSuchElementException
    at org.eclipse.sisu.plexus.RealmFilter$FilteredItr.next(RealmFilter.java:118)
    at org.eclipse.sisu.plexus.RealmFilter$FilteredItr.next(RealmFilter.java:1)
    at org.eclipse.sisu.plexus.DefaultPlexusBeans$Itr.next(DefaultPlexusBeans.java:76)
    at org.eclipse.sisu.plexus.DefaultPlexusBeans$Itr.next(DefaultPlexusBeans.java:1)
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:260)
    ... 34 more
[DEBUG] Writing tracking file /Users/philipp/.m2/repository/com/xxx/parent-pom/1.4.11-SNAPSHOT/parent-pom-1.4.11-20140722.193312-1.pom.lastUpdated
[ERROR] The build could not read 1 project -> [Help 1]
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM com.xxx:parent-pom:1.4.11-SNAPSHOT: Could not transfer artifact com.xxx:parent-pom:pom:1.4.11-20140722.193312-1 from/to maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot): No connector available to access repository maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot) of type default using the available factories WagonRepositoryConnectorFactory and 'parent.relativePath' points at wrong local POM @ line 9, column 10

    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:405)
    at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:663)
    at org.apache.maven.DefaultMaven.getProjectsForMavenReactor(DefaultMaven.java:654)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:243)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
[ERROR]   
[ERROR]   The project com.xxx:base:1.3.2-SNAPSHOT (/Users/philipp/Documents/IntelliJ/base/pom.xml) has 1 error
[ERROR]     Non-resolvable parent POM com.xxx:parent-pom:1.4.11-SNAPSHOT: Could not transfer artifact com.xxx:parent-pom:pom:1.4.11-20140722.193312-1 from/to maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot): No connector available to access repository maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot) of type default using the available factories WagonRepositoryConnectorFactory and 'parent.relativePath' points at wrong local POM @ line 9, column 10 -> [Help 2]
org.apache.maven.model.resolution.UnresolvableModelException: Could not transfer artifact com.xxx:parent-pom:pom:1.4.11-20140722.193312-1 from/to maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot): No connector available to access repository maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot) of type default using the available factories WagonRepositoryConnectorFactory
    at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:175)
    at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:224)
    at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:903)
    at org.apache.maven.model.building.DefaultModelBuilder.readParent(DefaultModelBuilder.java:755)
    at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:309)
    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:452)
    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:421)
    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:385)
    at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:663)
    at org.apache.maven.DefaultMaven.getProjectsForMavenReactor(DefaultMaven.java:654)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:243)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not transfer artifact com.xxx:parent-pom:pom:1.4.11-20140722.193312-1 from/to maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot): No connector available to access repository maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot) of type default using the available factories WagonRepositoryConnectorFactory
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:459)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:262)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:239)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact(DefaultRepositorySystem.java:295)
    at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:171)
    ... 22 more
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact com.xxx:parent-pom:pom:1.4.11-20140722.193312-1 from/to maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot): No connector available to access repository maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot) of type default using the available factories WagonRepositoryConnectorFactory
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:546)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:436)
    ... 26 more
Caused by: org.eclipse.aether.transfer.NoRepositoryConnectorException: No connector available to access repository maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot) of type default using the available factories WagonRepositoryConnectorFactory
    at org.eclipse.aether.internal.impl.DefaultRepositoryConnectorProvider.newRepositoryConnector(DefaultRepositoryConnectorProvider.java:193)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:531)
    ... 27 more
[ERROR] 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException

无法将工件 com.xxx:parent-pom:pom:1.4.11-20140722.193312-1 从/到 maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot) :没有连接器可用于访问默认类型的存储库 maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot),使用可用工厂 WagonRepositoryConnectorFactory 和 'parent.relativePath' 指向错误的本地 POM

所以我可以编写工件(凭据显然是正确的)但不能读取它们?我一定是忽略了一些简单的东西,但我真的找不到。

【问题讨论】:

    标签: java maven amazon-web-services amazon-s3


    【解决方案1】:

    我无法摆脱异常没有可用的连接器可用于访问存储库 maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot) 使用可用工厂 WagonRepositoryConnectorFactory。原因是,我正在使用远程/独立的&lt;parent&gt; POM,而 Maven 似乎尝试先加载它,然后才添加扩展。这就是发生错误的原因。

    所以,我需要回退到 HTTP(S)。但是,我不想公开我的工件,这排除了 S3 的静态网站托管。相反,我使用的是http://www.s3auth.com,它提供了 HTTP 基本身份验证并且运行良好。

    唯一需要注意的是:

    • 您通过 S3 wagon 上传 - 因此您需要在 settings.xml 中使用这些凭据。
    • 您通过 HTTP 下载 - 因此您还需要 settings.xml 中的基本身份验证凭据。
    • 因此,我为 S3 版本 + 快照引用创建了唯一 ID,并为 HTTP 版本 + 快照引用创建了唯一 ID。

    不幸的是,它目前不支持 HTTPS,这是一个主要缺点。

    【讨论】:

    • 即使启用 S3 作为静态网站托管,您仍然可以使用 S3 权限规则来控制访问,例如只允许某些 IP 访问等。
    • 对。但是,我们是在 Cloudbees 上构建的,它在 AWS 上运行,所以我们需要打开一个完整的区域,这并不像我们想要的那样细粒度。
    • 它可以通过在项目根目录中使用外部扩展文件来修复:.mvn/extensions.xml。它使扩展首先加载。 source of solution
    【解决方案2】:

    我创建了一个如何使用 S3 存储桶作为 maven 存储库的示例项目。

    https://github.com/wbinglee/maven-s3-repo

    从您的配置来看,我没有看到明显的问题。您可以将您的项目配置与上述示例项目进行比较。如果找不到问题,可能需要分享完整的 pom.xml。

    使用 S3 作为 maven 存储库的其他选项是直接使用 http 架构并将 S3 存储桶配置为静态 Web 托管。它也包含在上面的示例项目中,并在 README 中进行了所需的配置。

    然后您可以像下面这样配置您的 Maven 存储库配置:

    <repositories>
        <repository>
            <id>maven.xxx.com-release</id>
            <name>AWS S3 Release Repository</name>
            <url>http://maven.xxx.com.s3-website-ap-southeast-2.amazonaws.com/release</url>
        </repository>
        <repository>
            <id>maven.xxx.com-snapshot</id>
            <name>AWS S3 Snapshot Repository</name>
            <url>http://maven.xxx.com.s3-website-ap-southeast-2.amazonaws.com/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    

    希望对您有所帮助。

    【讨论】:

    • 感谢您创建回购协议,但无论出于何种原因,我都无法让它以这种方式工作。尽管如此,我还是会奖励您创建出色答案的积分:)
    【解决方案3】:

    如果您像我一样由于使用远程父 POM 和 Maven 在添加扩展之前尝试加载它(因此无法读取 s3://)而收到此消息,请参阅 https://github.com/spring-projects/aws-maven/issues/25#issuecomment-112031441

    这样做为我修复了它,并允许我保持父远程并让 maven 仍然通过 s3 url 和 IAM 权限解决它。

    【讨论】:

      【解决方案4】:

      从 Maven 3.3.1 开始,您可以简单地创建一个名为 ${maven.projectBasedir}/.mvn/extensions.xml 的文件。这将首先加载并像魅力一样工作。 详情见this answer或直接查看the release notes

      【讨论】:

        猜你喜欢
        • 2012-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-31
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多