May*_*ank 3 amazon-s3 gradle maven
我正在尝试使用 AWS S3 作为 maven 私有仓库..下面是我的 build.gradle 看起来像-:
import java.util.regex.Matcher
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.amazonaws:aws-java-sdk-core:1.11.5'
}
}
plugins {
id "java"
id "idea"
id "eclipse" //run "./gradlew cleanEclipse eclipse" after importing to eclipse
id "maven-publish"
id "maven"
id 'base'
id 'signing'
id 'jacoco'
id "net.researchgate.release" version "2.4.1"
id "org.springframework.boot" version "1.5.2.RELEASE"
}
def fetchAwsCredentials = {
try {
return new ProfileCredentialsProvider().getCredentials()
} catch (Exception e) {
logger.debug('Unable to retrieve AWS credentials from profile, publishing to S3 will not be available.', e)
return null
}
}
AWSCredentials awsCredentials = fetchAwsCredentials()
repositories {
mavenCentral()
maven {
url 'xxxxxxxx/<Bucket-Name>/snapshots/'
credentials(AwsCredentials) {
accessKey awsCredentials.AWSAccessKeyId
secretKey awsCredentials.AWSSecretKey
}
}
}
publish {
dependsOn assemble
}
publishing {
publications {
maven(MavenPublication) {
groupId this.properties['group']
artifactId this.properties['mavenArtifactId']
from components.java
}
}
repositories {
maven {
name 'repo'
credentials(AwsCredentials) {
accessKey awsCredentials.AWSAccessKeyId
secretKey awsCredentials.AWSSecretKey
}
if (project.version.endsWith('-SNAPSHOT')) {
url "xxxxxxxx/<Bucket-Name>/snapshots/"
} else {
url "xxxxxxxx/<Bucket-Name>/releases/"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到以下错误
引起:java.lang.IllegalArgumentException:Credentials must be an instance of:org.gradle.api.artifacts.repositories.PasswordCredentials at org.gradle.api.internal.artifacts.repositories.transport.RepositoryTransportFactory.convertPasswordCredentials(RepositoryTransportFactory.java 87) 在 org.gradle.api.internal.artifacts.repositories.transport.RepositoryTransportFactory.access$100(RepositoryTransportFactory.java:39) 在 org.gradle.api.internal.artifacts.repositories.transport.RepositoryTransportFactory$DefaultResourceConnectorSpecification.getCredentials(RepositoryTransportFactory.java:39) .java:136) 在 org.gradle.internal.resource.transport.http.HttpConnectorFactory.createResourceConnector(HttpConnectorFactory.java:36) 在 org.gradle.api.internal.artifacts.repositories.transport.RepositoryTransportFactory。createTransport(RepositoryTransportFactory.java:101) at org.gradle.api.internal.artifacts.repositories.transport.RepositoryTransportFactory.createTransport(RepositoryTransportFactory.java:79) at org.gradle.api.internal.artifacts.repositories.DefaultMavenArtifactRepository.getTransport DefaultMavenArtifactRepository.java:122) 在 org.gradle.api.internal.artifacts.repositories.DefaultMavenArtifactRepository.createResolver(DefaultMavenArtifactRepository.java:109) 在 org.gradle.api.internal.artifacts.repositories.DefaultMavenArtifactRepository(Repository.MavenDefault. 100) 在 org.gradle.api.internal.artifacts.repositories.DefaultMavenArtifactRepository.createResolver(DefaultMavenArtifactRepository.java:91) 在 org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ResolveIvyFactory。create(ResolveIvyFactory.java:92) at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultDependencyResolver$1.execute(DefaultDependencyResolver.java:92) at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultDepend $1.execute(DefaultDependencyResolver.java:90) at org.gradle.internal.Transformers$4.transform(Transformers.java:137) at org.gradle.api.internal.artifacts.ivyservice.DefaultIvyContextManager.withIvy(DefaultIvyContextManager.java:61) ) 在 org.gradle.api.internal.artifacts.ivyservice.DefaultIvyContextManager.withIvy(DefaultIvyContextManager.java:39) 在 org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultDependencyResolver.resolve(DefaultDependencyResolver.java:90) org.gradle.api.internal.artifacts.ivyservice.CacheLockingArtifactDependencyResolver$1。run(CacheLockingArtifactDependencyResolver.java:42) at org.gradle.internal.Factories$1.create(Factories.java:22) at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:192) at org.gradle。 cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:175) at org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache(DefaultPersistentDirectoryStore.java:106) at org.gradle.cache.internal.DefaultCacheFactory$ReferenceTrackingCache.useCache(DefaultCacheFactory. java:187) at org.gradle.api.internal.artifacts.ivyservice.DefaultCacheLockingManager.useCache(DefaultCacheLockingManager.java:64) at org.gradle.api.internal.artifacts.ivyservice.CacheLockingArtifactDependencyResolver.resolve(CacheLockingArtifactDepender)在 org.gradle.api.internal.artifacts.ivyservice。SelfResolvingDependencyResolver.resolve(SelfResolvingDependencyResolver.java:45) 在 org.gradle.api.internal.artifacts.ivyservice.ShortcircuitEmptyConfigsArtifactDependencyResolver.resolve(ShortcircuitEmptyConfigsArtifactDependency5Resolver.java: ivyservice.asp. ErrorHandlingArtifactDependencyResolver.java:47) ... 81 更多
看起来它失败是因为在 gradle jar- 中添加了不正确的条件:
任何线索?
小智 6
您面临的问题是错误的 S3 Url 模式。
有两个接口从基本Credentials
接口扩展。
当您使用 时url 'xxxxxxxx/<Bucket-Name>/snapshots/'
,它会将 Maven 存储库检测为普通 url。这就是为什么它要求PasswordCredentials
.
你应该使用s3://<bucket-name>.s3-eu-west-1.amazonaws.com
. 在这里它会要求AwsCredentials
.
恕我直言,您应该为发布和快照使用两个不同的存储桶。
repositories {
maven {
name 'repo'
credentials(AwsCredentials) {
accessKey awsCredentials.AWSAccessKeyId
secretKey awsCredentials.AWSSecretKey
}
if (project.version.endsWith('-SNAPSHOT')) {
url "s3://<bucket-name>-snapshots.s3-eu-west-1.amazonaws.com"
} else {
url "s3://<bucket-name>-releases.s3-eu-west-1.amazonaws.com"
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2899 次 |
最近记录: |