2014-07-22 14 views
6

Tôi đang cố gắng sử dụng Amazon S3 để lưu trữ các tạo phẩm Maven của mình. Tôi đã thêm thông tin sau vào pom.xml của tôi:Triển khai phụ thuộc Maven vào S3: Không có trình kết nối nào

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

Điều này hoạt động tốt và ảnh chụp của tôi được lưu trữ trên S3. Bây giờ tôi đang cố gắng để tham khảo các artifact trong một dự án khác:

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

Khi tôi chạy $ mvn deploy -X, tôi nhận được lỗi sau:

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 

Không thể chuyển com.xxx:parent-pom vật : pom: 1.4.11-20140722.193312-1 từ/đến maven.xxx.com-snapshot (s3: //maven.xxx.com/snapshot): Không có trình kết nối nào để truy cập kho lưu trữ maven.xxx.com-snapshot (s3: //maven.xxx.com/snapshot) của loại mặc định bằng cách sử dụng các nhà máy có sẵn WagonRepositoryConnectorFactory và 'parent.relativePath' điểm tại địa phương sai POM

Vì vậy, tôi có thể viết các hiện vật (thông tin đăng nhập rõ ràng là chính xác) nhưng không đọc chúng? Tôi phải nhìn một cái gì đó đơn giản, nhưng tôi không thể thực sự tìm thấy nó.

Trả lời

6

tôi không thể thoát khỏi sự ngoại lệ Không kết nối có sẵn để truy cập kho maven.xxx.com-chụp (s3: //maven.xxx.com/snapshot) kiểu mặc định bằng cách sử dụng các nhà máy có sẵn WagonRepositoryConnectorFactory. Lý do là, rằng tôi đang sử dụng một số từ xa/độc lập <parent> POM và Maven có vẻ như cố gắng tải đầu tiên đó và chỉ thêm phần mở rộng sau đó. Đó là lý do tại sao lỗi xảy ra.

Vì vậy, tôi cần quay trở lại HTTP (S). Tuy nhiên, tôi không muốn làm cho các tạo tác của mình được công khai, điều này loại trừ việc lưu trữ trang web tĩnh của S3. Thay vào đó, tôi đang sử dụng http://www.s3auth.com, cung cấp xác thực cơ bản HTTP và đang hoạt động tuyệt vời.

Điều duy nhất cần xem ra cho:

  • Bạn tải lên thông qua các toa xe S3 - vì vậy bạn cần những thông tin quan trọng trong settings.xml của bạn.
  • Bạn tải xuống qua HTTP - vì vậy bạn cũng cần có thông tin đăng nhập cơ bản trong tệp settings.xml của mình.
  • Vì vậy, tôi đã tạo ID duy nhất cho bản phát hành S3 + tham chiếu chụp nhanh và ID duy nhất cho bản phát hành HTTP + tham chiếu chụp nhanh.

Thật không may, nó không hỗ trợ HTTPS tại thời điểm này, đây là một trở ngại lớn.

+0

Thậm chí kích hoạt S3 làm trang web lưu trữ tĩnh, bạn vẫn có thể sử dụng Quy tắc cấp phép S3 để kiểm soát quyền truy cập, như chỉ cho phép một số IP truy cập v.v. –

+0

Phải. Tuy nhiên, chúng tôi đang xây dựng trên Cloudbees, chạy trên AWS vì vậy chúng tôi sẽ cần phải mở ra một khu vực, mà không phải là hạt mịn như chúng tôi muốn làm. – xeraa

5

Tôi đã tạo một dự án mẫu về cách sử dụng thùng S3 làm kho lưu trữ maven.

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

Từ cấu hình của bạn, tôi không thấy vấn đề rõ ràng. Bạn có thể so sánh cấu hình dự án của bạn với dự án mẫu ở trên. Nếu bạn không thể tìm thấy vấn đề, bạn có thể cần phải chia sẻ pom.xml đầy đủ của bạn.

Tùy chọn khác sử dụng S3 làm kho lưu trữ maven trực tiếp sử dụng lược đồ http và định cấu hình nhóm S3 làm lưu trữ web tĩnh. Nó cũng được bao gồm trong dự án mẫu ở trên với cấu hình cần thiết trong README.

Sau đó, bạn có thể cấu hình cấu hình kho maven của bạn như dưới đây:

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

Hy vọng rằng sẽ giúp.

+1

Cảm ơn bạn đã tạo repo, nhưng vì bất kỳ lý do gì tôi không quản lý để làm cho nó hoạt động theo cách đó. Tuy nhiên, tôi đang trao cho bạn những điểm để tạo ra một câu trả lời tuyệt vời :) – xeraa

+1

Nó hoạt động tốt, chỉ cần không cho một remote/standalone '' '' POM ... – xeraa

1

Nếu như tôi nhận được thông báo này do sử dụng cha mẹ từ xa POM và Maven cố gắng tải nó trước khi thêm phần mở rộng (và do đó không thể đọc s3: //), hãy xem https://github.com/spring-projects/aws-maven/issues/25#issuecomment-112031441.

Thực hiện việc này sẽ sửa lỗi cho tôi và cho phép tôi giữ cho cha mẹ ở xa và có con quạ vẫn giải quyết nó thông qua url s3 và quyền IAM.

Các vấn đề liên quan