根据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进行身份验证?
答案 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
}
}
这避免了手动创建提供者链实例并传递凭据值的需要。