2014-07-22 13 views
6

Sto tentando di utilizzare Amazon S3 per ospitare i miei artefatti Maven. Ho aggiunto il seguente al mio pom.xml:Distribuzione delle dipendenze Maven su S3: Nessun connettore disponibile

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

Questo sta lavorando bene e la mia fotografia istantanea è memorizzato su S3. Ora sto cercando di fare riferimento al manufatto in un altro progetto:

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

Quando eseguo $ mvn deploy -X, ottengo il seguente errore:

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 

non potrebbe trasferire com.xxx:parent-pom artefatto : pom: 1.4.11-20140722.193312-1 da/a maven.xxx.com-snapshot (s3: //maven.xxx.com/snapshot): Nessun connettore disponibile per accedere al repository maven.xxx.com-snapshot (s3: //maven.xxx.com/snapshot) di tipo predefinito utilizzando i factory disponibili WagonRepositoryConnectorFactory e punti parent.relativePath con POM locale errato

Quindi posso scrivere artefatti (le credenziali sono ovviamente corrette) ma non li ho letti? Devo trascurare qualcosa di semplice, ma non riesco davvero a trovarlo.

risposta

6

non riuscivo a liberarmi di eccezione Nessun connettore a disposizione per accedere ai repository maven.xxx.com-snapshot (S3: //maven.xxx.com/snapshot) di tipo predefinito utilizzando le fabbriche disponibili WagonRepositoryConnectorFactory. Il motivo è che sto usando un POM remoto/autonomo <parent> e Maven sembra provare a caricare quel primo e aggiungere solo le estensioni in seguito. Ecco perché sta accadendo l'errore.

Quindi, ho dovuto ricorrere a HTTP (S). Tuttavia, non voglio rendere pubblici i miei artefatti, il che esclude l'hosting statico del sito Web di S3. Invece sto usando http://www.s3auth.com, che fornisce l'autenticazione di base HTTP e funziona perfettamente.

L'unica cosa a cui fare attenzione:

  • Si carica tramite il carro S3 - quindi è necessario tali credenziali nella vostra settings.xml.
  • Si scarica tramite HTTP, quindi sono necessarie anche le credenziali di autenticazione di base in settings.xml.
  • Pertanto, ho creato ID univoci per la release S3 + riferimento di snapshot e ID univoci per i riferimenti di release + snapshot HTTP.

Sfortunatamente, al momento non supporta HTTPS, il che è uno dei principali inconvenienti.

+0

Anche abilitare S3 come hosting di siti web statici, puoi ancora usare Regola di autorizzazione S3 per controllare l'accesso, come solo consentire ad alcuni IP di accedere ecc. –

+0

Diritto. Tuttavia, stiamo costruendo su Cloudbees, che funziona su AWS, quindi avremmo bisogno di aprire un'intera regione, che non è così fine come vorremmo fare. – xeraa

5

Ho creato un progetto di esempio su come utilizzare il bucket S3 come repository Maven.

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

dalla configurazione, non vedo problema evidente. È possibile confrontare la configurazione del progetto con il progetto di esempio sopra. Se non riesci a trovare il problema, potresti dover condividere il tuo pom.xml completo.

Un'altra possibilità di utilizzare S3 come repository Maven è direttamente utilizzando lo schema http e configurare il bucket S3 come hosting Web statico. È anche incluso nel progetto di esempio sopra con la configurazione richiesta in README.

Quindi è possibile configurare la configurazione del repository Maven come di seguito:

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

Speranza che aiuta.

+1

Grazie per aver creato il repository, ma per qualche ragione non sono riuscito a farlo funzionare in questo modo. Comunque, ti sto assegnando i punti per la creazione di una risposta eccellente :) – xeraa

+1

Sta funzionando bene, non solo per un remoto/standalone '' '' POM ... – xeraa

1

Se come me si sta ricevendo questo messaggio a causa dell'utilizzo di un genitore remoto POM e Maven che tenta di caricarlo prima di aggiungere estensioni (e quindi non essere in grado di leggere s3: //), vedere https://github.com/spring-projects/aws-maven/issues/25#issuecomment-112031441.

Fare questo lo risolve per me e mi consente di mantenere il genitore remoto e ho ancora il compito di risolverlo tramite i permessi s3 url e IAM.

Problemi correlati