Java 将 Maven 依赖项部署到 S3:没有可用的连接器
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24896522/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Deploying Maven dependencies to S3: No connector available
提问by xeraa
I'm trying to use Amazon S3 to host my Maven artifacts. I've added the following to my pom.xml:
我正在尝试使用 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>
This is working fine and my snapshot is stored on S3. Now I'm trying to reference the artifact in another project:
这工作正常,我的快照存储在 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>
When I run $ mvn deploy -X
, I get the following error:
当我运行时$ 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
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
无法从/向 maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot) 传输工件 com.xxx:parent-pom:pom:1.4.11-20140722.193312-1:没有可访问的连接器存储库 maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot) 使用可用工厂 WagonRepositoryConnectorFactory 和 'parent.relativePath' 指向错误的本地 POM 类型的默认值
So I can write artifacts (the credentials are obviously correct) but not read them? I must be overlooking something simple, but I can't really find it.
所以我可以写工件(凭据显然是正确的)但不能读取它们?我一定是忽略了一些简单的东西,但我真的找不到它。
采纳答案by xeraa
I couldn't get rid of the exception No connector available to access repository maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot) of type default using the available factories WagonRepositoryConnectorFactory. The reason is, that I'm using a remote / stand-alone <parent>
POM and Maven seems to try to load that first and only add extensions afterwards. That's why the error is happening.
我无法摆脱异常No connector available to access repository maven.xxx.com-snapshot (s3://maven.xxx.com/snapshot) 使用可用工厂 WagonRepositoryConnectorFactory 的默认类型。原因是,我使用的是远程/独立<parent>
POM,而 Maven 似乎尝试先加载它,然后才添加扩展。这就是错误发生的原因。
So, I needed to fall back to HTTP(S). However, I don't want to make my artifacts public, which rules out S3's static website hosting. Instead I'm using http://www.s3auth.com, which provides HTTP basic auth and is working great.
所以,我需要回退到 HTTP(S)。但是,我不想公开我的工件,这排除了 S3 的静态网站托管。相反,我使用的是http://www.s3auth.com,它提供 HTTP 基本身份验证并且运行良好。
The only thing to watch out for:
唯一需要注意的是:
- You upload via the S3 wagon — so you need those credentials in your settings.xml.
- You download via HTTP — so you need the basic auth credentials in your settings.xml as well.
- Therefore, I've created unique IDs for the S3 release + snapshot reference and unique IDs for the HTTP release + snapshot references.
- 您通过 S3 wagon 上传 - 因此您需要在 settings.xml 中使用这些凭据。
- 您通过 HTTP 下载 — 因此您还需要 settings.xml 中的基本身份验证凭据。
- 因此,我为 S3 版本 + 快照引用创建了唯一 ID,并为 HTTP 版本 + 快照引用创建了唯一 ID。
Unfortunately, it doesn't support HTTPS at the moment, which is a major drawback.
不幸的是,它目前不支持 HTTPS,这是一个主要缺点。
回答by Wenbing Li
I have created a sample project of how to use S3 bucket as maven repository.
我创建了一个关于如何使用 S3 存储桶作为 Maven 存储库的示例项目。
https://github.com/wbinglee/maven-s3-repo
https://github.com/wbinglee/maven-s3-repo
From your configuration, I don't see obvious problem. You can compare your project configuration with above sample project. If you cannot find the problem, you may need to share your full pom.xml.
从你的配置来看,我没有看到明显的问题。您可以将您的项目配置与上述示例项目进行比较。如果您找不到问题,您可能需要共享您的完整 pom.xml。
Other option of using S3 as maven repository is directly using http
schema and configure S3 bucket as static web hosting. It's also included in above sample project with required configuration in README.
使用 S3 作为 Maven 存储库的其他选项是直接使用http
架构并将 S3 存储桶配置为静态 Web 托管。它也包含在上述示例项目中,并在 README 中进行了所需的配置。
Then you can configure your maven repository configuration like below:
然后你可以像下面这样配置你的 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>
Hope that helps.
希望有帮助。
回答by darrylb
If like me you're getting this message due to using a remote parent POM and Maven trying to load it before adding extensions (and therefore not being able to read s3://), see https://github.com/spring-projects/aws-maven/issues/25#issuecomment-112031441.
如果像我一样由于使用远程父 POM 和 Maven 在添加扩展之前尝试加载它而收到此消息(因此无法读取 s3://),请参阅https://github.com/spring-项目/aws-maven/issues/25#issuecomment-112031441。
Doing this fixes it for me and allows me to keep parent remote and have maven still resolve it via s3 url and IAM permissions.
这样做为我修复了它,并允许我保持父远程并让 maven 仍然通过 s3 url 和 IAM 权限解析它。
回答by Michael K?nig
Since Maven 3.3.1 you can simply create a file named ${maven.projectBasedir}/.mvn/extensions.xml
. This will be loaded first and works like a charme.
See this answeror directly check the release notesfor further details.
从 Maven 3.3.1 开始,您可以简单地创建一个名为${maven.projectBasedir}/.mvn/extensions.xml
. 这将首先加载并像魅力一样工作。请参阅此答案或直接查看发行说明以获取更多详细信息。