如何在Gradle构建中使用S3支持的Maven存储库的默认AWS凭证链?

时间:2016-03-07 19:39:00

标签: maven gradle amazon-s3

根据Gradle documention(例50.27),我们可以在Gradle 2.4中使用S3支持的Maven存储库。但是,文档中给出的唯一示例将显式AWS凭证传递给S3存储库声明:

repositories {
    maven {
        url "s3://someS3Bucket/maven2"
        credentials(AwsCredentials) {
            accessKey "someKey"
            secretKey "someSecret"
        }
    }
}

我需要做同样的事情,但我希望Gradle使用来自AWS JDK的DefaultAWSCredentialsProviderChain,而不是显式凭据。类似的东西:

repositories {
    maven {
        url "s3://someS3Bucket/maven2"
        credentials(AwsCredentials) {
            // Default AWS chain here?
        }
    }
}

这样,它会找到我为我的EC2实例配置的实例配置文件凭据,其中Gradle构建将在其中运行。

有没有办法实现这个目标?或者,Gradle是否只能使用构建文件中给出的显式凭据对S3进行身份验证?

3 个答案:

答案 0 :(得分:3)

未经测试,但我会尝试:

buildscript { 
    repositories { 
        mavenCentral() 
    } 

    dependencies { 
        classpath 'com.amazonaws:aws-java-sdk:1.10.58' 
    } 
}

import com.amazonaws.auth.DefaultAWSCredentialsProviderChain

repositories {
    maven {
        url "s3://someS3Bucket/maven2"
        credentials(AwsCredentials) {

            def defaultCredentials = new DefaultAWSCredentialsProviderChain().getCredentials()
            accessKey defaultCredentials.getAWSAccessKeyId()
            secretKey defaultCredentials.getAWSSecretKey()
        }
    }
}

答案 1 :(得分:3)

我设法使用以下build.gradle完成pom.xml生成以及上传到S3:

apply plugin: 'java'
apply plugin: 'maven-publish'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.amazonaws:aws-java-sdk:1.10.58'
    }
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            groupId 'com.acme'
            artifactId 'sample-gradle-dependency'
            version '1.0'
            from components.java
        }
    }
    repositories {      
        maven {
            url "s3://my-bucket/releases"
            credentials(AwsCredentials) {
                def defaultCredentials = new com.amazonaws.auth.DefaultAWSCredentialsProviderChain().getCredentials()
                accessKey defaultCredentials.getAWSAccessKeyId()
                secretKey defaultCredentials.getAWSSecretKey()
            }
        }       
    }   
}

这个需要apply plugin: maven-publish,这显然是apply plugin: maven的新版本。

这个运行时:

$ gradle publish

答案 2 :(得分:1)

最新版本的Gradle提供了built-in way来使用默认提供商链中的凭据,例如:

maven {
    url "s3://myCompanyBucket/maven2"
    authentication {
       awsIm(AwsImAuthentication) // load from EC2 role or env var
    }
}

这避免了手动创建提供者链实例并传递凭据值的需要。