As the title suggests, it describes how to create a Maven repository on Amazon S3 and use it with Gradle.
When developing a module that depends on an in-house module, it is used to resolve and build dependencies on the server.
The goals of this article are 1 and 2 below.
Regarding 2, specifically, make it possible to download the library when executing the "gradle build" command with the following build.gradle settings.
build.gradle
dependencies {
compile 'jp.co.goalist:library:1.0.0'
}
The following content is beyond the scope of this article. Someday again.
Execute the following command.
mkdir gradle-upload-s3repo
cd gradle-upload-s3repo/
gradle init --type=java-library
The generated file looks like this.
.
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ └── java
│ └── Library.java
└── test
└── java
└── LibraryTest.java
At this point, the contents of build.gradle are as follows. (Unnecessary comments and dependent library settings have been removed)
build.gradle
apply plugin: 'java'
//Dependent library is undefined, so
//No repositories and dependencies are needed at this time,
//I will use it later, so I will leave it.
repositories {
jcenter()
}
dependencies {
}
For confirmation, type "gradle build" in the project root and "gradle-upload-s3repo.jar" will be generated in build / libs. So far, this is the default feature of the java plugin. After checking, let's delete the build result by "gradle clean".
Maven uniquely defines a library with a combination of groupId, artifactId and version.
The library created this time follows the convention,
Key | value |
---|---|
groupId | jp.co.goalist |
artifactId | library |
version | 1.0.0 |
Let's.
Add the following settings to build.gradle.
build.gradle
group = "jp.co.goalist"
version = "1.0.0"
Modify settings.gradle as follows.
settings.gradle
rootProject.name = 'library'
We'll skip the steps, but create a bucket to use as the repository.
This time, create "s3: //repository.hoge/maven/".
Set the repository URL, IAM user access key ID and secret access key in ~ / .gradle / gradle.properties. By referring to this on the project side, it is not necessary to include it in the project, so it is safe in terms of security. (I'm saying normal things) You don't have to set the access key ID etc. in each project.
gradle.properties
goalistRepoUrl=s3://repository.hoge/maven/
awsAccessKeyId = AKIAJWORQEXXXXXXXXXX
awsSecretAccessKey = waTa0aakgK2e5hXXXXXXXXXXXXXXXXXXXXXXXXXX
Use the maven plugin uploadArchives to upload to the Maven repository. Add the settings to refer to the repository URL, IAM user access key ID, and secret access key you set earlier.
build.gradle
apply plugin: 'maven'
build.gradle
uploadArchives {
repositories {
mavenDeployer {
configuration = configurations.deployerJars
repository(url: goalistRepoUrl) {
authentication(userName: awsAccessKeyId, password: awsSecretAccessKey)
}
}
}
}
We will use org.springframework.build: aws-maven to access S3, so add the setting to dependencies. This time I will use the latest version 5.0.0.RELEASE.
http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.springframework.build%22%20AND%20a%3A%22aws-maven%22
build.gradle
configurations {
deployerJars
}
dependencies {
deployerJars 'org.springframework.build:aws-maven:5.0.0.RELEASE'//add to
}
This completes the setting. The final result is as follows.
build.gradle
apply plugin: 'java'
apply plugin: 'maven'
group = "jp.co.goalist"
version = "1.0.0"
repositories {
jcenter()
}
configurations {
deployerJars
}
uploadArchives {
repositories {
mavenDeployer {
configuration = configurations.deployerJars
repository(url: goalistRepoUrl) {
authentication(userName: awsAccessKeyId, password: awsSecretAccessKey)
}
}
}
}
dependencies {
deployerJars 'org.springframework.build:aws-maven:5.0.0.RELEASE'
}
settings.gradle
rootProject.name = 'library'
Execute the following command, and if BUILD SUCCESSFULL is displayed, it is successful.
gradle uploadArchives
When I check S3
I think the library has been uploaded under s3: //repository.hoge/maven/.
Create a Gradle project that depends on the library you uploaded this time.
mkdir gradle-upload-s3repo-child
cd gradle-upload-s3repo-child/
gradle init --type=java-library
Modify build.gradle to set the S3 repository reference and dependency settings.
build.gradle
apply plugin: 'java'
repositories {
jcenter()
maven {
url goalistRepoUrl
credentials(AwsCredentials) {
accessKey awsAccessKeyId
secretKey awsSecretAccessKey
}
}
}
dependencies {
compile 'jp.co.goalist:library:1.0.0'
}
Execute the following command, and if you can confirm that it is BUILD SUCCESSFUL, you are done.
gradle build
In actual operation, I think that it is possible to operate it as if it is possible to upload only from the build server so that the developer can only refer to it. Let's reuse the module.
Recommended Posts