2014-07-22 6 views
6

Ich versuche, Amazon S3 zu verwenden, um meine Maven-Artefakte zu hosten. Ich habe hinzugefügt, die folgenden meinen pom.xml:Deployment Maven-Abhängigkeiten zu S3: Kein Connector verfügbar

<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> 

Dies funktioniert gut und mein Snapshot wird auf S3 gespeichert. Jetzt versuche ich, das Artefakt in einem anderen Projekt zu verweisen:

<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> 

Wenn ich $ mvn deploy -X laufen lasse, erhalte ich folgende Fehlermeldung:

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 

kann nicht übertragen Artefakt com.xxx:parent-pom : pom: 1.4.11-20140722.193312-1 von/nach maven.xxx.com-snapshot (s3: //maven.xxx.com/snapshot): Kein Connector verfügbar, um auf das Repository zuzugreifen maven.xxx.com-snapshot (s3: //maven.xxx.com/snapshot) des Typs default mit den verfügbaren Fabrics WagonRepositoryConnectorFactory und 'parent.relativePath' zeigt auf falsches lokales POM

So kann ich Artefakte schreiben (die Anmeldeinformationen sind offensichtlich korrekt), aber nicht gelesen? Ich muss etwas Einfaches übersehen, aber ich kann es nicht wirklich finden.

Antwort

6

ich nicht Kein Anschluss verfügbar für den Zugriff auf Repository maven.xxx.com-snapshot Loswerden der Ausnahme erhalten könnte (s3: //maven.xxx.com/snapshot) vom Typ Standard mit den vorhandenen Fabriken WagonRepositoryConnectorFactory. Der Grund ist, dass ich ein Remote/Standalone <parent> POM benutze und Maven scheint zu versuchen, das zuerst zu laden und danach Erweiterungen hinzuzufügen. Deshalb ist der Fehler passiert.

Also musste ich auf HTTP (S) zurückgreifen. Allerdings möchte ich meine Artefakte nicht öffentlich machen, was das statische Website-Hosting von S3 ausschließt. Stattdessen benutze ich http://www.s3auth.com, die HTTP-Basisauthentifizierung bietet und großartig funktioniert.

Das einzige, was zu achten gilt:

  • Sie über den Wagen S3 laden - so müssen Sie diese Anmeldeinformationen in Ihrer settings.xml.
  • Sie laden über HTTP herunter - Sie benötigen also die grundlegenden Authentifizierungsdaten in Ihrer settings.xml.
  • Daher habe ich eindeutige IDs für die S3 Release + Snapshot-Referenz und eindeutige IDs für die HTTP-Release + Snapshot-Referenzen erstellt.

Leider unterstützt es derzeit nicht HTTPS, was ein großer Nachteil ist.

+0

Aktivieren Sie sogar S3 als statische Website-Hosting, können Sie immer noch verwenden S3-Berechtigungsregel, um Zugriff zu kontrollieren, wie nur einigen IPs Zugang zu erlauben etc. –

+0

Richtig. Wir bauen jedoch auf Cloudbees auf, das auf AWS läuft, so dass wir eine ganze Region erschließen müssten, die nicht so feinkörnig ist, wie wir es gerne hätten. – xeraa

5

Ich habe ein Beispielprojekt zur Verwendung von S3-Bucket als Maven-Repository erstellt.

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

Von Ihrer Konfiguration sehe ich nicht offensichtliches Problem. Sie können Ihre Projektkonfiguration mit dem obigen Beispielprojekt vergleichen. Wenn Sie das Problem nicht finden können, müssen Sie möglicherweise Ihre vollständige pom.xml-Datei freigeben.

Eine andere Option, S3 als Maven-Repository zu verwenden, verwendet direkt das Schema http und konfiguriert S3-Bucket als statisches Webhosting. Es ist auch im obigen Beispielprojekt mit der erforderlichen Konfiguration in README enthalten.

Dann können Sie Ihre Maven-Repository-Konfiguration wie unten konfigurieren:

<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> 

Hoffnung, das hilft.

+1

Vielen Dank für die Erstellung des Repos, aber aus irgendeinem Grund habe ich es nicht geschafft, es so zu machen. Dennoch gebe ich Ihnen die Punkte für das Erstellen einer ausgezeichneten Antwort :) – xeraa

+1

Es funktioniert gut, nur nicht für eine Fernbedienung/Standalone '' 'POM ... – xeraa

1

Wenn Sie diese Nachricht erhalten, weil Sie ein entferntes übergeordnetes POM verwenden und Maven versucht, es zu laden, bevor Erweiterungen hinzugefügt werden (und s3: // nicht lesen können), siehe https://github.com/spring-projects/aws-maven/issues/25#issuecomment-112031441.

Doing dies behebt es für mich und ermöglicht es mir, Eltern remote zu behalten und maven noch über s3 url und IAM Berechtigungen zu lösen.

Verwandte Themen